一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - mysql如何查詢兩個日期之間最大的連續登錄天數

mysql如何查詢兩個日期之間最大的連續登錄天數

2020-06-28 15:58daisy Mysql

在現在的很多網站中都有這樣一個功能。記錄用戶的連續登陸天數,所謂的連續在線是指相鄰兩天都登錄過,不一定一直在線,但是只要有過登錄即可。這篇文章主要介紹的是利用sql語句如何查詢在兩個日期之間最大的連續登錄天

前言

最近工作中遇到一個需求,是根據用戶連續記錄天數來計算的,求出用戶在一段時間內最大的連續記錄時間,例如在 2016-01-01 和 2016-01-28 之間,如果用戶在3號和4號都記錄了,那么連續記錄天數為2,如果用戶在6號-10號每日都記錄了,那么最大連續記錄天數為5.

拿到這個需求的時候,說實話有點懵,第一想到的就是在代碼中去統計,會用到循環,想到那么多個用戶,并且時間跨度也有點大,比如15年到16年,兩年時間,想想就有點恐怖。

解決方案

然后就把這個需求跟朋友說了,朋友也覺得有點難搞,后來通過網上一篇文章有了一些小思路。但是看得也是一知半解的,雖然經常寫 sql 語句,但也是常用的那些增刪改查,像這樣使用的方式根本沒用過,過了會,朋友又扔給我一條 sql 語句,就在該文章的基礎上進行了修改,以符合我的項目需求的語句。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;

查詢出來的結果如下圖所示:

mysql如何查詢兩個日期之間最大的連續登錄天數

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用sql語句能有所幫助,如果有疑問大家可以留言交流。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91尤物在线播放 | 亚洲人成网站在线观看妞妞网 | 日本zzzzwww大片免费 | 美女免费观看一区二区三区 | 久久久乱码精品亚洲日韩 | 99成人国产精品视频 | 欧美区日韩区 | 日本h乱淫动漫在线观看 | 亚洲成综合人影院在院播放 | 美女福利视频网站 | 欧美成人手机 | 日本欧美大码a在线视频播放 | 亚欧洲乱码专区视频 | 国四虎影永久 | 国产免费精彩视频 | 色综合久久六月婷婷中文字幕 | 99re这里只有精品视频在线观看 | 久久WWW免费人成一看片 | 欧美聚众性派对hdsex | 91大神在线观看精品一区 | 国产精品欧美在线观看 | 国产精品成人一区二区 | 麻豆在线md0087免费 | 国产好深好硬好爽我还要视频 | 1024日韩基地 | 日韩精品亚洲专区在线影视 | 日本高清视频网址 | 滑进了柔佳火热紧夹的 | 1717she精品视频在线观看 | 极品丝袜小说全集 | 国产乱码一卡二卡3卡四卡 国产乱插 | 国产在线xvideos | 国产亚洲精aa在线观看香蕉 | 亚洲高清国产品国语在线观看 | 欧美涩区 | 欧美人体高清在线观看ggogo | 午夜国产小视频 | 国产尤物视频 | 国产播放器一区 | 国产香蕉国产精品偷在线观看 | 欧美国产视频 |