我的表格中有以下数据
Key |Eff_DT | End_Dt | Ind
1 |Jan | Mar | Y
1 |Feb | May | Y
1 |Mar | Jul | Y
1 |Jun | Aug | N
1 |Sep | Oct | Y
1 |Nov | Dec | N
预期结果是
Key |Eff_DT | End_Dt | Ind
1 |Jan | Jul | Y
1 |Sep | Oct | Y
解释
我需要考虑两行之间的所有记录,其中Ind为'N',并找到Min of Eff_dt和Max of End_dt。
我应该使用哪种功能来实现这一目标?
答案 0 :(得分:2)
假设Eff_DT
和End_Dt
实际上是DATE
列:
select key, Ind, min(Eff_DT), max(End_Dt)
from
(
select key, Ind, Eff_DT, End_Dt,
-- start a new group whenever "Ind" is not 'Y' using a cumulative sum of 0's and 1's
sum(case when Ind ='Y' then 0 else 1 end)
over (partition by key
order by Eff_DT
rows unbounded preceding) as grp
from tab
qualify Ind = 'Y' -- only return the 'Y' rows
) as dt
group by key, Ind, grp