mysql如何查詢兩個日期之間最大的連續(xù)登錄天數(shù)
前言
最近工作中遇到一個需求,是根據(jù)用戶連續(xù)記錄天數(shù)來計算的,求出用戶在一段時間內(nèi)最大的連續(xù)記錄時間,例如在 2016-01-01 和 2016-01-28 之間,如果用戶在3號和4號都記錄了,那么連續(xù)記錄天數(shù)為2,如果用戶在6號-10號每日都記錄了,那么最大連續(xù)記錄天數(shù)為5.
拿到這個需求的時候,說實話有點懵,第一想到的就是在代碼中去統(tǒng)計,會用到循環(huán),想到那么多個用戶,并且時間跨度也有點大,比如15年到16年,兩年時間,想想就有點恐怖。
解決方案
然后就把這個需求跟朋友說了,朋友也覺得有點難搞,后來通過網(wǎng)上一篇文章有了一些小思路。但是看得也是一知半解的,雖然經(jīng)常寫 sql 語句,但也是常用的那些增刪改查,像這樣使用的方式根本沒用過,過了會,朋友又扔給我一條 sql 語句,就在該文章的基礎(chǔ)上進行了修改,以符合我的項目需求的語句。
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;
查詢出來的結(jié)果如下圖所示:

如果要查看單個人的,那么將 sql 語句中的 uid !=0 改成具體的值即可。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學習或者使用sql語句能有所幫助,如果有疑問大家可以留言交流。
相關(guān)文章
mysql執(zhí)行sql文件報錯Error: Unknown storage engine‘InnoDB’的解決方法
最近在執(zhí)行一個innoDB類型sql文件的時候,發(fā)現(xiàn)系統(tǒng)報錯了,通過查找相關(guān)的資料終于解決了,所以下面這篇文章主要給大家介紹了關(guān)于mysql執(zhí)行sql文件時報錯Error: Unknown storage engine 'InnoDB'的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
mysql8報錯:ERROR?1410?(42000):?You?are?not?allowed?to?
電腦新裝的mysql,版本為8.0以上,分配權(quán)限時直接帶密碼和賬號會報錯,這篇文章主要給大家介紹了關(guān)于mysql8報錯:ERROR?1410?(42000):?You?are?not?allowed?to?create?a?user?with?GRANT的解決辦法,需要的朋友可以參考下2022-06-06
mysqldump加-w參數(shù)備份數(shù)據(jù)時需要注意的事項
這篇文章主要介紹了mysqldump加-w參數(shù)備份數(shù)據(jù)時需要注意的事項,需要的朋友可以參考下2014-06-06
mysql load data infile 的用法(40w數(shù)據(jù) 用了
測試數(shù)據(jù)的時候,生成txt文件應該快點,再用這種方式導入到mysql 速度上快點,40w數(shù)據(jù) 用了3-5秒導進mysql2013-01-01
MySQL Community Server 8.0.11安裝配置方法圖文教程
這篇文章主要為大家詳細 介紹了MySQL Community Server 8.0.11安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05

