国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-24 12:53:28
字體:
來源:轉載
供稿:網友

前言

最近工作中遇到一個需求,是根據用戶連續記錄天數來計算的,求出用戶在一段時間內最大的連續記錄時間,例如在 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) ntmpGROUP BY uid;

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

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

總結

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

您可能感興趣的文章:

mysql 查詢第幾行到第幾行記錄的語句使用mysql的disctinct group by查詢不重復記錄MySQL中在查詢結果集中得到記錄行號的方法MySQL 查詢某個字段不重復的所有記錄mysql 正則表達式查詢含有非數字和字符的記錄MySQL查詢兩個日期之間記錄的方法Mysql查詢最近一條記錄的sql語句(優化篇)mysql 查詢表中平均分最低的班級mysql實現查詢最接近的記錄數據示例
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石屏县| 北流市| 炎陵县| 天门市| 绵竹市| 嘉义县| 望江县| 米易县| 讷河市| 新龙县| 理塘县| 罗定市| 景洪市| 雅安市| 安顺市| 县级市| 灵武市| 通江县| 当雄县| 张家港市| 黑山县| 大理市| 石楼县| 江陵县| 玉龙| 汉阴县| 江门市| 石棉县| 镇沅| 青铜峡市| 大同县| 霸州市| 拜城县| 威海市| 河津市| 扬州市| 丹阳市| 台中市| 共和县| 新乡县| 贡山|