如何从含两个日期字段的表中按日期聚合记录数?
问题描述
现有如下数据表:
| 人员 | 到达日期 | 离开日期 |
|---|---|---|
| John | 01/01/2022 | 04/01/2022 |
| Ana | 03/01/2022 | 04/01/2022 |
| Ronald | 04/01/2022 | NULL |
需要得到如下统计结果:
| 日期 | 新增到达人数 | 新增离开人数 |
|---|---|---|
| 01/01/2022 | 1 | 0 |
| 03/01/2022 | 1 | 0 |
| 04/01/2022 | 1 | 2 |
解决方案
可以通过拆分到达、离开事件为独立记录,再按日期分组统计的方式实现:
WITH date_events AS ( -- 提取到达日期对应的到达事件 SELECT 到达日期 AS 日期, 1 AS 到达人数, 0 AS 离开人数 FROM 你的数据表名 UNION ALL -- 提取非空离开日期对应的离开事件 SELECT 离开日期 AS 日期, 0 AS 到达人数, 1 AS 离开人数 FROM 你的数据表名 WHERE 离开日期 IS NOT NULL ) SELECT 日期, SUM(到达人数) AS 新增到达人数, SUM(离开人数) AS 新增离开人数 FROM date_events GROUP BY 日期 ORDER BY 日期;
逻辑说明:
- 用
WITH子句构建临时数据集,将每条人员记录拆分为“到达”和“离开”两类事件(无离开日期的记录仅保留到达事件); - 按日期分组后,对每日的到达、离开事件数分别求和,得到当日新增统计;
- 最后按日期排序,保证结果顺序符合预期。
内容的提问来源于stack exchange,提问作者Voja Vujic
相关产品推荐
相关产品推荐

