主頁(yè) > 知識(shí)庫(kù) > mysql如何查詢兩個(gè)日期之間最大的連續(xù)登錄天數(shù)

mysql如何查詢兩個(gè)日期之間最大的連續(xù)登錄天數(shù)

熱門(mén)標(biāo)簽:安陽(yáng)手機(jī)自動(dòng)外呼系統(tǒng)原理是什么 如何辦理400客服電話 外呼系統(tǒng)線路經(jīng)常出問(wèn)題嗎 地圖標(biāo)注什么軟件好用 神行者百貨商場(chǎng)地圖標(biāo)注 西藏地圖標(biāo)注改進(jìn)點(diǎn) 地圖標(biāo)注專(zhuān)員入駐 地圖標(biāo)注百度競(jìng)價(jià) 外呼系統(tǒng)怎樣才能不封號(hào)

前言

最近工作中遇到一個(gè)需求,是根據(jù)用戶連續(xù)記錄天數(shù)來(lái)計(jì)算的,求出用戶在一段時(shí)間內(nèi)最大的連續(xù)記錄時(shí)間,例如在 2016-01-01 和 2016-01-28 之間,如果用戶在3號(hào)和4號(hào)都記錄了,那么連續(xù)記錄天數(shù)為2,如果用戶在6號(hào)-10號(hào)每日都記錄了,那么最大連續(xù)記錄天數(shù)為5.

拿到這個(gè)需求的時(shí)候,說(shuō)實(shí)話有點(diǎn)懵,第一想到的就是在代碼中去統(tǒng)計(jì),會(huì)用到循環(huán),想到那么多個(gè)用戶,并且時(shí)間跨度也有點(diǎn)大,比如15年到16年,兩年時(shí)間,想想就有點(diǎn)恐怖。

解決方案

然后就把這個(gè)需求跟朋友說(shuō)了,朋友也覺(jué)得有點(diǎn)難搞,后來(lái)通過(guò)網(wǎng)上一篇文章有了一些小思路。但是看得也是一知半解的,雖然經(jīng)常寫(xiě) sql 語(yǔ)句,但也是常用的那些增刪改查,像這樣使用的方式根本沒(méi)用過(guò),過(guò)了會(huì),朋友又扔給我一條 sql 語(yǔ)句,就在該文章的基礎(chǔ)上進(jìn)行了修改,以符合我的項(xiàng)目需求的語(yǔ)句。

SELECT *
FROM (SELECT *
   FROM (
       SELECT
        uid,
        max(days)   lianxu_days,
        min(login_day) start_date,
        max(login_day) end_date
       FROM (SELECT
           uid,
           @cont_day :=
           (CASE
           WHEN (@last_uid = uid AND DATEDIFF(created_ts, @last_dt) = 1)
            THEN
             (@cont_day + 1)
           WHEN (@last_uid = uid AND DATEDIFF(created_ts, @last_dt)  1)
            THEN
             (@cont_day + 0)
           ELSE
            1
           END)                       AS days,
           (@cont_ix := (@cont_ix + IF(@cont_day = 1, 1, 0))) AS cont_ix,
           @last_uid := uid,
           @last_dt := created_ts                login_day
          FROM (SELECT
              uid,
              DATE(created_ts) created_ts
             FROM plan_stage
             WHERE uid != 0
             ORDER BY uid, created_ts) AS t,
           (SELECT
            @last_uid := '',
            @last_dt := '',
            @cont_ix := 0,
            @cont_day := 0) AS t1
         ) AS t2
       GROUP BY uid, cont_ix
       HAVING lianxu_days > 10
      ) tmp
   ORDER BY lianxu_days DESC) ntmp
GROUP BY uid;

查詢出來(lái)的結(jié)果如下圖所示:

如果要查看單個(gè)人的,那么將 sql 語(yǔ)句中的 uid !=0 改成具體的值即可。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用sql語(yǔ)句能有所幫助,如果有疑問(wèn)大家可以留言交流。

您可能感興趣的文章:
  • MYSQL實(shí)現(xiàn)連續(xù)簽到功能斷簽一天從頭開(kāi)始(sql語(yǔ)句)
  • SQLSERVER記錄登錄用戶的登錄時(shí)間(自寫(xiě)腳本)
  • SQLSERVER記錄登錄用戶的登錄時(shí)間(自寫(xiě)腳本)
  • SQL查詢語(yǔ)句求出用戶的連續(xù)登陸天數(shù)

標(biāo)簽:萍鄉(xiāng) 雞西 酒泉 阜陽(yáng) 衡水 貴港 張掖 AXB

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql如何查詢兩個(gè)日期之間最大的連續(xù)登錄天數(shù)》,本文關(guān)鍵詞  mysql,如何,查詢,兩個(gè),日期,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql如何查詢兩個(gè)日期之間最大的連續(xù)登錄天數(shù)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于mysql如何查詢兩個(gè)日期之間最大的連續(xù)登錄天數(shù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章