Oracle SQL中如何找出不符合日期接续规则的数据行
使用LAG()函数找出违规数据行
先理清LAG()函数的核心用法
LAG()是SQL窗口函数,作用是访问当前行之前指定行数的字段值。针对你的需求,我们需要获取每一行的上一行Enddate值,再和当前行的Date做对比,就能找出不符合规则的数据。
具体SQL实现步骤
假设你的表名为your_table,先通过子查询给每行添加上一行的Enddate:
SELECT Date, Enddate, -- 按Date排序后,获取上一行的Enddate值 LAG(Enddate) OVER (ORDER BY Date) AS previous_enddate FROM your_table;
接着筛选出Date与previous_enddate不相等的行,就是违规数据:
SELECT * FROM ( SELECT Date, Enddate, LAG(Enddate) OVER (ORDER BY Date) AS previous_enddate FROM your_table ) AS subquery -- 排除无前置行的首行(可选),只对比有上一行的数据 WHERE Date != previous_enddate AND previous_enddate IS NOT NULL;
针对你示例数据的结果
运行上述SQL后,会精准返回第4行违规数据:
| Date | Enddate | previous_enddate |
|---|---|---|
| 20012022 | 26012022 | 24012022 |
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

