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次.我尝试了嵌套查询和非常复杂的案例,但即使我迷失了方向,所以我想知道是否有人知道如何更聪明地得到答案.
您可以使用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)