MySql计算用户连续签到日期

SELECT
	count(1),@i := DATE_ADD(@i, INTERVAL 1 DAY)
FROM
	(
		SELECT
			date_sub(a.time_, INTERVAL 1 DAY) signDate,
			(
				@i := DATE_ADD(@i, INTERVAL - 1 DAY)
			) today
		FROM
			(
				SELECT
					time_
				FROM
					wechat_fans_signin_log 
				WHERE
					fans_id_ = 38
				ORDER BY
					time_ DESC
			) a
			INNER JOIN (
			SELECT
				@i := max(time_) AS signMax
			FROM
				wechat_fans_signin_log 
			WHERE
				fans_id_ = 38
			AND (
				TO_DAYS(time_) = TO_DAYS(curdate())
				OR TO_DAYS(time_) = TO_DAYS(
					DATE_ADD(curdate(), INTERVAL - 1 DAY)
				)
			)
		) b ON b.signMax IS NOT NULL AND TO_DAYS(DATE_ADD(@i, INTERVAL - 1 DAY)) = TO_DAYS(date_sub(a.time_, INTERVAL 1 DAY))
	) c
	/*@i:自定义变量;time_:签到存储日期;fans_id:签到用户ID;DATE_ADD:
	计算起始日期 d 加上一个时间段后的日期;date_sub:函数从日期减去指定的时间间隔;
	TO_DAYS:计算日期 d 距离 0000 年 1 月 1 日的天数;
	curdate():返回当前日期;
	查询结果:用户ID为38的用户连续签到日期、最后一次签到日期;
	使用JPA查询,注意(@i := ** )中的“:”要加双斜线转义,即“@i//:= ** ”  */
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值