ppgjx 发表于 2022-6-18 11:25

mysql如何查询近七天的记录和日期?

我有一个签到记录表 表结构
用户id    签到时间   奖励数量连续签到天数
user_idsign_timeamount   sign_day

只有用户当天进行签到才有记录

现在有个需求 查询本周 每一天的签到情况这个sql该怎么写呢?





Vvvvvoid 发表于 2022-6-18 11:35

大概就是这样吧, 具体 日期时间的加减 , 跟 日期格式化的函数 你可以自己在看看

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

一只小凡凡 发表于 2022-6-18 11:42

服务端写一个函数用来计算7天这个周期,SQL查询代码是:
select * from [表名] where date between '[开始的日期]' and '[结束的日期]'
只需带入计算的函数,就可以了,日期的格式是这种:2022-01-01

cn380190 发表于 2022-6-18 12:27

select * from 表名 where DateDiff(dd,sign_time,getdate())<=7

小小学生 发表于 2022-6-18 14:56

本帖最后由 小小学生 于 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]
查看完整版本: mysql如何查询近七天的记录和日期?