如何在PostgreSQL中统计每月每一天的记录数量
PostgreSQL按日统计指定月份符合条件的记录数
方案1:仅统计有数据的日期
直接对visit_disch_date分组,格式化日期后输出每日计数:
SELECT TO_CHAR(visit.visit_disch_date, 'MM-DD-YYYY') AS disch_date, COUNT(*) AS record_count FROM visit WHERE visit.visit_disch_date >= '2022-12-01' AND visit.visit_disch_date < '2023-01-01' -- 修正原条件,确保包含12月31日全天数据 AND visit.visit_stay_type = '1' GROUP BY visit.visit_disch_date ORDER BY visit.visit_disch_date;
方案2:显示12月所有日期(含计数为0的日期)
如果需要输出12月每一天的结果,哪怕当天没有符合条件的记录,先通过generate_series生成完整日期序列,再左连接原表统计:
WITH date_range AS ( SELECT generate_series( '2022-12-01'::DATE, '2022-12-31'::DATE, '1 day'::INTERVAL ) AS date ) SELECT TO_CHAR(dr.date, 'MM-DD-YYYY') AS disch_date, COUNT(v.visit_disch_date) AS record_count FROM date_range dr LEFT JOIN visit v ON dr.date = v.visit_disch_date AND v.visit_stay_type = '1' GROUP BY dr.date ORDER BY dr.date;
说明
TO_CHAR函数用来将日期格式化为你需要的MM-DD-YYYY格式。- 原查询的
visit_disch_date < '2022-12-31'会排除12月31日的所有记录(因为该条件等价于< '2022-12-31 00:00:00'),改用< '2023-01-01'才能正确包含12月31日全天的数据。
内容的提问来源于stack exchange,提问作者Perk8
相关产品推荐
相关产品推荐

