如何使用CASE WHEN检测同组内日期不一致的情况?
需求:标记同组内日期不匹配的行
新增一列以标记同组内日期不匹配的行:当State和City相同的分组内存在不同Date时,该列显示Date Mismatch,否则为空。
数据示例
| State | City | Date |
|---|---|---|
| Texas | Austin | 2023 |
| Texas | Austin | 2023 |
| Texas | Austin | 2020 |
| Texas | Houston | 2023 |
| Texas | Houston | 2023 |
修正后的SQL代码
使用窗口函数可高效实现需求,无需多余过滤条件:
SELECT State, City, Date, CASE WHEN COUNT(DISTINCT Date) OVER (PARTITION BY State, City) > 1 THEN 'Date Mismatch' ELSE NULL END AS "Checks Column" FROM your_table_name; -- 替换为实际表名
代码说明
PARTITION BY State, City:按州和城市分组COUNT(DISTINCT Date) OVER (...):统计每个分组内不同日期的数量- 当数量大于1时,说明分组内存在日期不匹配,标记为
Date Mismatch
预期结果
| State | City | Date | Checks Column |
|---|---|---|---|
| Texas | Austin | 2023 | Date Mismatch |
| Texas | Austin | 2023 | Date Mismatch |
| Texas | Austin | 2020 | Date Mismatch |
| Texas | Houston | 2023 | |
| Texas | Houston | 2023 |
内容的提问来源于stack exchange,提问作者21mlln
相关产品推荐
相关产品推荐

