You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB中查询最近30天记录,实现无数据日期计数补零

MariaDB 最近30天日期补0统计实现方案

核心思路是先生成最近30天的完整连续日期序列,再通过左关联匹配业务表统计结果,无匹配的日期统计值自动补0。

适配MariaDB的完整查询语句

WITH RECURSIVE date_series AS (
    -- 生成起始日期:往前推29天,加上当天刚好覆盖最近30天
    SELECT DATE_SUB(CURDATE(), INTERVAL 29 DAY) AS full_date
    UNION ALL
    -- 递归生成后续日期直到当前日期
    SELECT full_date + INTERVAL 1 DAY 
    FROM date_series 
    WHERE full_date < CURDATE()
)
SELECT 
    ds.full_date AS date,
    -- 空值转0,必须统计业务表的非空字段,禁止使用COUNT(*)
    COALESCE(COUNT(c.id), 0) AS sum
FROM date_series ds
LEFT JOIN customers c 
    ON DATE(c.o_date) = ds.full_date
    -- 时间范围过滤放到关联条件里,避免左关联后过滤掉无数据的日期
    AND c.o_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY ds.full_date
ORDER BY ds.full_date DESC;

注意事项

  • 该方案支持MariaDB 10.2及以上版本(递归CTE从10.2版本开始支持)
  • 时间范围过滤不要放到WHERE子句,否则会把无匹配的日期行直接过滤掉,失去补0的效果
  • 如果需要调整统计的时间范围,只需要修改CTE里的起始日期和递归终止条件即可

内容的提问来源于stack exchange,提问作者viktor1230

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:45:02