mysql若何查詢兩個日期之間最年夜的持續登錄天數。本站提示廣大學習愛好者:(mysql若何查詢兩個日期之間最年夜的持續登錄天數)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql若何查詢兩個日期之間最年夜的持續登錄天數正文
媒介
比來任務中碰到一個需求,是依據用戶持續記載天數來盤算的,求出用戶在一段時光內最年夜的持續記載時光,例如在 2016-01-01 和 2016-01-28 之間,假如用戶在3號和4號都記載了,那末持續記載天數為2,假如用戶在6號-10號逐日都記載了,那末最年夜持續記載天數為5.
拿到這個需求的時刻,說真話有點懵,第一想到的就是在代碼中去統計,會用到輪回,想到那末多個用戶,而且時光跨度也有點年夜,好比15年到16年,兩年時光,想一想就有點恐懼。
處理計劃
然後就把這個需求跟同伙說了,同伙也認為有點難弄,後來經由過程網上一篇文章有了一些小思緒。然則看得也是一知半解的,固然常常寫 sql 語句,但也是經常使用的那些增刪改查,像如許應用的方法基本沒用過,過了會,同伙又扔給我一條 sql 語句,就在該文章的基本長進行了修正,以相符我的項目需求的語句。
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;
查詢出來的成果以下圖所示:

假如要檢查單小我的,那末將 sql 語句中的 uid !=0 改成詳細的值便可。
總結
以上就是這篇文章的全體內容了,願望本文的內容對年夜家進修或許應用sql語句能有所贊助,假如有疑問年夜家可以留言交換。