我有一个表Item_X
,其主要列为Item_id,Country,Date_from
。
不属于PK
的其他列是Date_To
,TypeOfSale
。
有TypeOfSale
为1,2,3。
Date From始终为Date_to + 1.
2月1日至2月29日的记录丢失。
我想找出所有这些记录。 不应考虑第一条记录,最后一条记录可以将To_date视为空。
答案 0 :(得分:1)
这是一种方法:
select r.*
from records r
where not exists (select 1 from records r2 where r2.item_id = r.item_id and r2.date_from = r.date_to + 1) and
exists (select 1 from records r2 where r2.item_id = r.item_id and r2.date_from > r.date_to);
这将返回差距之前的第一条记录。
另一种方法使用lead()
和lag()
:
select r.*
from (select r.*,
lead(date_from) over (partition by item_id order by date_from) as next_date_from,
lag(date_to) over (partition by item_id order by date_from) as prev_date_to
from records r
) r
where (date_from <> prev_date_to + 1) or
(date_to <> next_date_from - 1);
这将返回两个记录。