2017-08-13 70 views
0

我有如下所示,并且仍有成千上万行这样查找不具有连续的日期范围在DB2行

MBR  MBR_SPAN  EFF_DT END_DT   
1 B 1/1/2011 12/31/2011 
1 C 1/1/2012 12/31/2012 
1 A 2/1/2013 12/31/2013 
2 D 1/1/2010 12/31/2010 
2 X 1/1/2011 12/31/ 2011 

我需要找到的行中每个成员的数据它是不连续的与以前的日期范围。在这种情况下,它是MBR 1和MBR_SPAN A

我没有一个连续的列进行排序并确定哪个列应该有连续的日期范围。它必须通过对比前一行来决定(可能通过排序eff_dt)

而且它不会产生任何临时表,因为我不能够获得创建DB2表来完成。

谁能帮助?

回答

1

这里有一个方法:

select * 
from (select t.*, 
      lag(end_dt) over (partition by mbr order by eff_dt) as prev_end_dt 
     from t 
    ) t 
where end_dt <> prev_end_dt + 1 day and prev_end_dte is not null; 
+0

非常感谢回复。它按预期工作 –

0

变化:假设你的表被称为“指明MyDate”,你想一个单行结果从上面的样本数据集:
select * from (select t.*, lag(end_dt) over (partition by mbr order by eff_dt) as prev_end_dt from mydate as t ) x where x.eff_dt <> x.prev_end_dt + 1 day and x.prev_end_dt is not null

0

其他方法:

with tmp as 
(
    select f1.*, rownumber() over (partition by f1.mbr order by f1.eff_dt, f1.END_DT) as rang 
    from yourtablename f1 
) 
select f1.* from tmp f1 
inner join tmp f2 on f1.mbr=f2.mbr and f1.rang=f2.rang-1 and f1.eff_dt + 1 day <> f2.eff_dt