吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1180|回复: 4
收起左侧

[求助] mysql如何查询近七天的记录和日期?

  [复制链接]
ppgjx 发表于 2022-6-18 11:25
我有一个签到记录表 表结构
用户id    签到时间   奖励数量  连续签到天数
user_id  sign_time  amount     sign_day

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

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

image.png



发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Vvvvvoid 发表于 2022-6-18 11:35
大概就是这样吧, 具体 日期时间的加减 , 跟 日期格式化的函数 你可以自己在看看

[SQL] 纯文本查看 复制代码
select * , count(id) as count , format('yyyy-mm-dd',sign_time ) as yyyy_mm_dd  from t_table where sign_time >= sign_time-7 
group by yyyy_mm_dd
一只小凡凡 发表于 2022-6-18 11:42
服务端写一个函数用来计算7天这个周期,SQL查询代码是:
[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 编辑

假设你的日期为时间戳
你的需求是,查询本周 每一天的签到情况,也就是本周每一天里有谁签到了
[SQL] 纯文本查看 复制代码
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()) 不过这里我更建议你使用服务端生成的日期参数传进来
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表