如何检查SQL Server中不同行上的日期是否重叠?

edg*_*iet 0 sql sql-server validation date

我有一个带电表读数的数据库.有时人们得到一个新的仪表,然后他们的原始仪表得到一个结束日期,新仪表得到一个开始日期,结束日期仍为NULL.这可能会在一年内多次发生,我想知道测量中是否存在差距.换句话说,我需要弄清楚结束日期1是否与开始日期2相同,依此类推.

样本数据:

cust_id meter_id     start_date         end_date
--------------------------------------------------
   a       1         2017-01-01         2017-05-02
   a       2         2017-05-02         Null
   b       3         2017-01-01         2017-06-01
   b       4         2017-06-05         Null
Run Code Online (Sandbox Code Playgroud)

这就是数据的样子,我要找的结果是,对于客户来说,仪表1的结束日期等于仪表2的开始日期.但是对于客户b,仪表的结束日期之间有4天. 3和仪表4的开始日期.这是我要标记的东西.

我找到的客户在我研究期间最多可能发生8次.我尝试了嵌套查询和非常复杂的案例,但即使我迷失了方向,所以我想知道是否有人知道如何更聪明地得到答案.

Gor*_*off 5

您可以使用lag()以下方法获取有问题的行:

select r.*
from (select r.*,
             lag(end_date) over (partition by cust_id, meter_id order by start_date) as prev_end_date,
             row_number() over (partition by cust_id, meter_id order by start_date) as seqnum
      from readings r
     ) r
where prev_end_date <> start_date or prev_end_date is null and seqnum > 1;
Run Code Online (Sandbox Code Playgroud)