在 db2 中查找不具有连续日期范围的行

Posted

技术标签:

【中文标题】在 db2 中查找不具有连续日期范围的行【英文标题】:Finding rows which don't have continuous date range in db2 【发布时间】:2017-08-13 23:55:18 【问题描述】:

我有如下数据,并且有数百万行这样的行

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;

【讨论】:

【参考方案2】:

变化:假设您的表名为“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

【讨论】:

【参考方案3】:

其他方法:

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

【讨论】:

以上是关于在 db2 中查找不具有连续日期范围的行的主要内容,如果未能解决你的问题,请参考以下文章

在两个单独的列中折叠具有连续范围的行

标记不连续的日期范围

查找具有已定义结束的连续相同值的行组 (SQL Redshift)

SQL Server连续日期 - 将多行汇总为连续的开始和结束日期行,而不包含CTE,循环,... s

查找具有延期日期范围的行并累积其持续时间

pandas-对列中具有相同值的连续行进行分组和聚合