2009-06-16 8 views
2

J'ai une table comme celui-ciRegroupement en t-sql avec les dernières dates

 
Event ID | Contract ID | Event date | Amount | 
---------------------------------------------- 
1  | 1   | 2009-01-01 | 100 | 
2  | 1   | 2009-01-02 |  20 | 
3  | 1   | 2009-01-03 |  50 | 
4  | 2   | 2009-01-01 |  80 | 
5  | 2   | 2009-01-04 |  30 | 

Pour chaque contrat je dois aller chercher le dernier événement et le montant associé à l'événement et obtenir quelque chose comme ça

 
Event ID | Contract ID | Event date | Amount | 
---------------------------------------------- 
3  | 1   | 2009-01-03 |  50 | 
5  | 2   | 2009-01-04 |  30 | 

Je n'arrive pas à comprendre comment regrouper correctement les données. Des idées?

Merci d'avance.

Répondre

7

SQL 2K5/2K8:

with cte_ranked as (
select * 
    , row_number() over (
     partition by ContractId order by EvantDate desc) as [rank] 
    from [table]) 
select * 
    from cte_ranked 
    where [rank] = 1; 

SQL 2k:

select t.* 
    from table as t 
    join (
     select max(EventDate) as MaxDate 
      , ContractId 
      from table 
      group by ContractId) as mt 
     on t.ContractId = mt.ContractId 
      and t.EventDate = mt.MaxDate 
+0

Merci pour la réponse. Je vais essayer. –

Questions connexes