Die Gruppierung in T-SQL mit aktuellen Terminen
Frage
Ich habe eine Tabelle wie folgt
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 |
Für jeden Auftrag muss ich die letzte Veranstaltung und Menge mit dem Ereignis verknüpft holen und so etwas wie diese bekommen
Event ID | Contract ID | Event date | Amount | ---------------------------------------------- 3 | 1 | 2009-01-03 | 50 | 5 | 2 | 2009-01-04 | 30 |
ich kann nicht herausfinden, wie man richtig Gruppe die Daten. Irgendwelche Ideen?
Vielen Dank im Voraus.
Lösung
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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow