sql统计最近4个季度 无数据自动填充
时间: 2024-02-01 17:13:35 浏览: 83
假设你要统计的是某个表中的数据,可以使用以下 SQL 语句来实现:
```
WITH quarters AS (
SELECT
DATE_TRUNC('quarter', NOW() - INTERVAL '3' QUARTER) AS quarter_start,
DATE_TRUNC('quarter', NOW()) AS quarter_end
UNION ALL
SELECT
quarter_start - INTERVAL '3' MONTH AS quarter_start,
quarter_start AS quarter_end
FROM quarters
WHERE quarter_start > '2020-01-01'
)
SELECT
quarters.quarter_start,
quarters.quarter_end,
COALESCE(SUM(data.value), 0) AS total_value
FROM quarters
LEFT JOIN data ON data.date >= quarters.quarter_start AND data.date < quarters.quarter_end
GROUP BY quarters.quarter_start, quarters.quarter_end
ORDER BY quarters.quarter_start;
```
这个 SQL 语句使用了一个 CTE(common table expression)来生成最近 4 个季度的日期范围,然后使用 LEFT JOIN 将这个日期范围与数据表中的日期进行匹配,使用 COALESCE 函数来将空值转化为 0,最后使用 GROUP BY 对每个季度的数据进行统计。如果某个季度没有数据,会自动填充为 0。
需要注意的是,这个 SQL 语句使用了 PostgreSQL 的语法,如果你使用的是其他数据库,可能需要进行一些修改。
阅读全文