查询统计当前日期往前推近七天每天的记录数

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 是日期字段名。

只显示有数据的日期

查询统计当前日期往前推近七天每天的记录数_第1张图片

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 函数来将空值替换为零。结果集将按日期升序排列。

这样,即使某一天没有数据,也会在结果集中显示,并用零值进行补充。

也只显示有数据的日期

查询统计当前日期往前推近七天每天的记录数_第2张图片

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“ 填充

查询统计当前日期往前推近七天每天的记录数_第3张图片

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“ 填充

查询统计当前日期往前推近七天每天的记录数_第4张图片

你可能感兴趣的:(MySQL,数据库,sql,mysql)