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語句能有所贊助,假如有疑問年夜家可以留言交換。