mysql如何查询近七天的记录和日期?
我有一个签到记录表 表结构用户id 签到时间 奖励数量连续签到天数
user_idsign_timeamount sign_day
只有用户当天进行签到才有记录
现在有个需求 查询本周 每一天的签到情况这个sql该怎么写呢?
大概就是这样吧, 具体 日期时间的加减 , 跟 日期格式化的函数 你可以自己在看看
select * , count(id) as count , format('yyyy-mm-dd',sign_time ) as yyyy_mm_ddfrom t_table where sign_time >= sign_time-7
group by yyyy_mm_dd
服务端写一个函数用来计算7天这个周期,SQL查询代码是:
select * from [表名] where date between '[开始的日期]' and '[结束的日期]'
只需带入计算的函数,就可以了,日期的格式是这种:2022-01-01 select * from 表名 where DateDiff(dd,sign_time,getdate())<=7 本帖最后由 小小学生 于 2022-6-18 14:58 编辑
假设你的日期为时间戳
你的需求是,查询本周 每一天的签到情况,也就是本周每一天里有谁签到了。SELECT
GROUP_CONCAT(user_id),
FROM_UNIXTIME(sign_time, '%Y-%m-%d') AS time
FROM
table
WHERE
sign_time BETWEEN
UNIX_TIMESTAMP(DATE_SUB(
CURDATE(),
INTERVAL WEEKDAY(CURDATE()) + 0 DAY
))
AND UNIX_TIMESTAMP(DATE_SUB(
CURDATE(),
INTERVAL WEEKDAY(CURDATE()) - 6 DAY
))
GROUP BY
time
这里会输出本周第一天开始 每一天有谁签到了,当然会有漏掉的天数,比如当天没有人签到就没有记录,那么可以在服务端里生成本周到今天的日期 循环进行对比 如果结果不存在的话 则设置为0或者空 代表当天没人签到。
关于刚才写的sql语句,我是加了本周第一天和最后一天的条件,当然你也可以把and的那个条件换成FROM_UNIXTIME(now()) 不过这里我更建议你使用服务端生成的日期参数传进来
页:
[1]