最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年10月23日 08:51:15   投稿:daisy  
在現(xiàn)在的很多網(wǎng)站中都有這樣一個(gè)功能。記錄用戶的連續(xù)登陸天數(shù),所謂的連續(xù)在線是指相鄰兩天都登錄過(guò),不一定一直在線,但是只要有過(guò)登錄即可。這篇文章主要介紹的是利用sql語(yǔ)句如何查詢?cè)趦蓚€(gè)日期之間最大的連續(xù)登錄天數(shù),有需要的朋友們下面來(lái)一起看看吧。

前言

最近工作中遇到一個(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ō)了,朋友也覺得有點(diǎn)難搞,后來(lái)通過(guò)網(wǎng)上一篇文章有了一些小思路。但是看得也是一知半解的,雖然經(jīng)常寫 sql 語(yǔ)句,但也是常用的那些增刪改查,像這樣使用的方式根本沒用過(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ǔ)句能有所幫助,如果有疑問大家可以留言交流。

相關(guān)文章

最新評(píng)論

类乌齐县| 松潘县| 四会市| 四子王旗| 金坛市| 瓮安县| 剑川县| 庆阳市| 色达县| 贡嘎县| 岫岩| 永和县| 正定县| 交口县| 崇信县| 丰原市| 吴江市| 革吉县| 苏州市| 三穗县| 商水县| 秦安县| 黄平县| 万安县| 齐齐哈尔市| 桂东县| 盐边县| 五寨县| 九江市| 伊宁县| 冀州市| 砀山县| 韶关市| 卓尼县| 东安县| 清苑县| 睢宁县| 霞浦县| 古丈县| 连州市| 永城市|