连续登陆天数的SQL

DROP TABLE  if exists user_login;  
CREATE TABLE user_login(  
    user_id INT NOT NULL,  
    create_date DATETIME NOT NULL  
);
INSERT INTO user_login(user_id, create_date) VALUES(1,'2020-09-27 13:30:45');  
INSERT INTO user_login(user_id, create_date) VALUES(1,'2020-09-26 13:30:45');  
SELECT
	a.create_date, (@i := DATE_ADD(@i, INTERVAL - 1 DAY)) previous_day
FROM (
		SELECT create_date
		FROM user_login
		WHERE user_id = 2
		ORDER BY create_date DESC
	) a
INNER JOIN (
	SELECT @i := max(create_date) AS latest_date
	FROM user_login
	WHERE user_id = 2
	AND (
		TO_DAYS(create_date) = TO_DAYS(curdate())
		OR TO_DAYS(create_date) = TO_DAYS(
			DATE_ADD(curdate(), INTERVAL - 1 DAY)
		)
	)
) b ON b.latest_date IS NOT NULL
WHERE TO_DAYS(@i) = TO_DAYS(a.create_date);

今天与昨天是否登陆了,如果没有登陆就不用计算了,为0.
如果今天与昨天登陆了,就用最近登陆的变量逐减,查询出连续登陆的记录。

sql优先级:
from>on>join>where>group by>having>select>distinct>order by>top

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值