Teradata Sub Grouping

时间:2015-10-22 20:53:56

标签: sql function subquery teradata

我的表格中有以下数据

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。

我应该使用哪种功能来实现这一目标?

1 个答案:

答案 0 :(得分:2)

假设Eff_DTEnd_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