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 表示的是当前时间。
没有数据或者时间不存在以”0“ 填充
5、查询当前日期往前推6个小时的每个小时的记录数,并且在某个时间不存在时显示零值
sqlCopy CodeSELECT
hours.hour AS hour,
COUNT(your_table.date_column) AS count
FROM
(
SELECT
(DATE_SUB(DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:00:00'), INTERVAL numbers.i HOUR)) AS hour
FROM
(SELECT 0 AS i 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 numbers
) AS hours
LEFT JOIN
your_table ON DATE_FORMAT(your_table.date_column, '%Y-%m-%d %H:00:00') = hours.hour
WHERE
hours.hour >= DATE_SUB(DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y-%m-%d %H:00:00'), INTERVAL 6 HOUR)
GROUP BY
hours.hour
ORDER BY
hours.hour;
请将上述查询中的your_table
替换为你实际的表名,date_column
替换为你的日期或时间戳列名。
这个查询使用了子查询生成一个临时表hours
,其中包含从当前时间往前推6个小时的所有小时。然后,使用左连接将临时表与实际数据表进行关联,通过比较时间戳来匹配记录。使用COUNT()
函数统计每个小时的记录数,并通过GROUP BY
分组。最后,通过ORDER BY
按小时顺序输出结果。
这样,你就可以查询到当前日期往前推近6个小时的每个小时的记录数,并且在时间不存在时显示零值。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/188486.html