在 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)