技术饭

Mysql如何查询连续的时间次数

copylian    0 评论    11663 浏览    2019.02.26

在网上看到一道有意思的题目,大意是如何在mysql查询连续的时间内登录的次数。

原文链接:https://blog.csdn.net/qq_28867949/article/details/79434178

原文中相关说明很少,看起来很费劲,故在这里,我自己添加了些说明,完全是自己理解的,

若有不对,欢迎批评指正,谢谢。

在网上看到一道有意思的题目,大意是如何在mysql查询连续在线的天数。

所谓的连续在线是指相邻两天都登录过,不一定一直在线,但是只要有过登录即可。

如,1月1日登录了一会下线了,一月2日登录了一会下线了,那么,就算1月1日和2日是连续在线,天数为2。

如果1月3日,没有登录过,1月4日登录了,此时,1月4日与1月1日、2日不算连续在线了。

设连续在线天数为days,则1月1日在线,days=1;1月2日在线,days=2;1月3日不在线,1月4日在线,days=1;1月5日在线,days=2;

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(login_dt, @last_dt)=1) THEN

                  (@cont_day + 1)

                 WHEN (@last_uid = uid AND DATEDIFF(login_dt, @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 := login_dt login_day

          FROM (SELECT uid, DATE(sts) AS login_dt

                  FROM tmysql_test_lianxu_3

                 ORDER BY uid, sts) AS t,

               (SELECT @last_uid := '',

                       @last_dt  := '',

                       @cont_ix  := 0,

                       @cont_day := 0) AS t1) AS t2

 GROUP BY uid, cont_ix;


只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!

文明上网理性发言!

  • 还没有评论,沙发等你来抢