Ich habe eine Tabelle, die Versionsgeschichte verfolgt. Ich möchte nur die neueste Version zusammen mit dem Datum für jede ID in der Tabelle abrufen. Das folgende gibt mir das späteste Datum für jede ID, Versionskombination. Wie kann ich nur den obersten Rekord auswählen? Ich kann dies in einer temporären Tabelle speichern und dann Join verwenden, um nur den obersten Datensatz für jede ID, Versionskombination zu erhalten. Gibt es einen besseren Weg, dies in einem einzigen Schritt zu erreichen?Erhalten Sie den neuesten Datensatz, wenn nach zwei Spalten gruppiert SQL Server
Beispieldaten
id version timestamp
123 1.5 2015-03-28 08:21:04.563
123 1.0 2015-03-21 12:58:24.730
234 1.5 2016-10-15 23:08:09.550
345 1.5 2016-05-10 15:18:09.707
345 1.5 2016-09-02 21:30:00.657
Erwartete Ausgabe
id version timestamp
123 1.5 2015-03-28 08:21:04.563
234 1.5 2016-10-15 23:08:09.550
345 1.5 2016-09-02 21:30:00.657
Abfrage
select id,version,max(dt_create)
from version_history (nolock)
group by id,version
order by id
Ich habe dies versucht, aber ich habe das gleiche Ergebnis wie oben
select * from
(
select id,version,dt_create,row_number() over (partition by id,version order by dt_create desc) as a
from version_history (nolock)
) b
where a=1
order by id
Thanks.My Tabelle hat 210 Millionen Aufzeichnungen und das dauert 40+ Minuten. Mit Join bekomme ich die Ergebnisse in 8 Minuten zurück. –
@inquisitive_mind Happy Sie haben eine Lösung. Ich kann mir nicht vorstellen, warum du mehr als 40 Minuten hast, wenn du deine Daten nicht in die Tabellenvariable geladen hast. –