不连续的记录,缺少时间差距。

时间:2016-08-02 12:29:36

标签: sql database oracle plsql

我有一个表Item_X,其主要列为Item_id,Country,Date_from。 不属于PK的其他列是Date_ToTypeOfSale。 有TypeOfSale为1,2,3。

在特定时间段内,仅限销售类型有效。 对于Ex: - enter image description here

Date From始终为Date_to + 1.

我的桌子上有一些不连续的记录。 例:- enter image description here

2月1日至2月29日的记录丢失。

我想找出所有这些记录。 不应考虑第一条记录,最后一条记录可以将To_date视为空。

1 个答案:

答案 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);

这将返回两个记录。