2015-10-22 2 views
0

je les données suivantes dans ma tableTeradata Sous Groupement

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 

résultat attendu est

Key |Eff_DT | End_Dt | Ind 
1 |Jan  | Jul  | Y 
1 |Sep  | Oct  | Y 

Explication:

je dois considérer tous les enregistrements entre deux rangées a Ind comme 'N' et trouve Min de Eff_dt et Max de End_dt.

Quelle fonction dois-je utiliser pour réaliser ceci?

+0

Je suppose que les champs de date comprennent année aussi? –

+0

@JuanCarlosOropeza oui –

Répondre

2

En supposant que Eff_DT et End_Dt sont en fait DATE colonnes:

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