1、查询统计当前日期往前推近七天每天的记录数。
并且如果某一天没有数据,则该天不会显示在结果集中,也不会用零值补充
SELECT date_format(create_time, '%Y-%m-%d'), count(*)
FROM your_table
WHERE create_time >= date_sub(curdate(), interval 6 day)
GROUP BY date_format(create_time, '%Y-%m-%d');
其中,your_table 是您需要查询的数据表名称,create_time 是日期字段名。
只显示有数据的日期
2、统计当前日期往前推近七天每天的记录数,并用零值补充那些没有数据的日期
SELECT
DATE_SUB(CURDATE(), INTERVAL seq.seq DAY) AS date,
COALESCE(COUNT(yt.create_time), 0) AS count
FROM
(SELECT 0 AS seq UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) AS seq
LEFT JOIN your_table yt ON DATE(yt.create_time) = DATE_SUB(CURDATE(), INTERVAL seq.seq DAY)
WHERE
DATE(yt.create_time) >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
GROUP BY date
ORDER BY date;
//----------------------------------------------------------------------------
your_table 替换为您需要查询的表名,create_time 替换为您的日期字段名。
这个查询语句使用了一个子查询 seq 来生成连续的数字序列,然后通过左连接和日期函数来统计每天的记录数。使用 COALESCE 函数来将空值替换为零。结果集将按日期升序排列。
这样,即使某一天没有数据,也会在结果集中显示,并用零值进行补充。
也只显示有数据的日期
3、统计当前日期零点往前推近七天每天的记录数,并用零值补充那些没有数据的日期
SELECT
DATE_FORMAT(date_range.date, '%Y-%m-%d') AS date,
COALESCE(COUNT(yt.create_time), 0) AS count
FROM
(SELECT CURDATE() - INTERVAL (seq.seq) DAY AS date
FROM (SELECT @rownum:=@rownum+1 AS seq
FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) r,
(SELECT @rownum:=0) t) AS seq) AS date_range
LEFT JOIN your_table yt ON DATE(yt.create_time) = date_range.date
GROUP BY date
ORDER BY date;
//-----------------------------
your_table 替换为您需要查询的表名,create_time 替换为您的日期字段名。
这个查询语句使用了一个子查询 seq 来生成连续的数字序列,然后通过左连接和日期函数来统计每天的记录数。使用 COALESCE 函数将空值替换为零。结果集将按日期升序排序。
这样,即使某一天没有数据,也会在结果集中显示,并用零值进行补充。
没有数据或者时间不存在以”0“ 填充
4、统计当前日期零点往前推近七天每天的记录数,并用零值补充那些没有数据或者不存在的日期,
SELECT
DATE_FORMAT(date_range.date, '%Y-%m-%d') AS date,
COALESCE(COUNT(yt.create_time), 0) AS count
FROM
(SELECT CURDATE() - INTERVAL (seq.seq) DAY AS date
FROM (SELECT @rownum:=@rownum+1 AS seq
FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) r,
(SELECT @rownum:=0) t) AS seq) AS date_range
LEFT JOIN your_table yt ON DATE(yt.create_time) = date_range.date
WHERE
date_range.date BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 DAY) AND CURDATE()
GROUP BY date
ORDER BY date;
//--------------------------
将 your_table 替换为您需要查询的表名,create_time 替换为您的日期字段名。
这个查询语句使用了一个子查询 seq 来生成连续的数字序列,然后通过左连接和日期函数来统计每天的记录数。使用 COALESCE 函数将空值替换为零。结果集将按日期升序排序。
在查询的 WHERE 子句中,我们只选择那些在过去七天内的日期。如果某一天没有数据或者不存在,也会在结果集中显示,并用零值进行补充。
注意:在这个查询中,我们使用的是 CURDATE() 而不是 CURRENT_TIMESTAMP,因为 CURDATE() 表示的是当天零点的日期,而 CURRENT_TIMESTAMP 表示的是当前时间。