如何用SQL按日期列统计Odertime在date前后的记录数?
需求说明
现有数据表如下:
| ID | type | date | Odertime |
|---|---|---|---|
| 1 | A | 2022-03-02 | 2021-06-23 |
| 2 | A | 2022-03-05 | 2021-06-25 |
| 1 | A | 2022-03-02 | 2022-10-09 |
| 3 | A | 2022-03-06 | 2021-04-05 |
| 2 | A | 2022-03-05 | 2022-02-05 |
| 2 | A | 2022-03-05 | 2022-05-13 |
需要按ID和type分组,统计每组中Odertime早于date的记录数(命名为before),以及Odertime晚于date的记录数(命名为after),期望得到结果表:
| ID | type | before | after |
|---|---|---|---|
| 1 | A | 1 | 1 |
| 2 | A | 2 | 1 |
| 3 | A | 1 | 0 |
解决方案
使用SQL的条件聚合函数即可实现,通过CASE WHEN判断每条记录的时间关系,结合SUM()累加统计,最后按指定字段分组:
SELECT ID, type, SUM(CASE WHEN Odertime < date THEN 1 ELSE 0 END) AS before, SUM(CASE WHEN Odertime > date THEN 1 ELSE 0 END) AS after FROM your_table_name GROUP BY ID, type;
关键说明
CASE WHEN Odertime < date THEN 1 ELSE 0 END:对单条记录判断时间先后,满足条件返回1,否则返回0,SUM()累加后得到before的总数CASE WHEN Odertime > date THEN 1 ELSE 0 END:同理,统计Odertime晚于date的记录数,得到after字段GROUP BY ID, type:确保统计结果按ID和type的唯一组合分组呈现
注:请将语句中的your_table_name替换为实际的数据表名称。
内容的提问来源于stack exchange,提问作者Ollie
相关产品推荐
相关产品推荐

