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//:= ** ” */
MySql计算用户连续签到日期
最新推荐文章于 2023-04-13 14:13:47 发布