Ich habe ein table
wie unten -Top-N Datensätze wählen für jede Entität
ID | Reported Date | Device_ID
-------------------------------------------
1 | 2016-03-09 09:08:32.827 | 1
2 | 2016-03-08 09:08:32.827 | 1
3 | 2016-03-08 09:08:32.827 | 1
4 | 2016-03-10 09:08:32.827 | 2
5 | 2016-03-05 09:08:32.827 | 2
Jetzt möchte ich eine top 1
row
basierend auf date column
für jede device_ID
Erwartete Ausgabe
ID | Reported Date | Device_ID
-------------------------------------------
1 | 2016-03-09 09:08:32.827 | 1
4 | 2016-03-10 09:08:32.827 | 2
Ich verwende SQL Server 2008 R2
. Ich kann gehen und Stored Procedure
schreiben, um es zu handhaben, aber wollte es mit einfacher Abfrage tun.
**************** EDIT **************************
Antwort von ‚Felix Pamittan‘ hat gut funktioniert, aber für ‚N‘ es nur zu
SELECT
Id, [Reported Date], Device_ID
FROM (
SELECT *,
Rn = ROW_NUMBER() OVER(PARTITION BY Device_ID ORDER BY [ReportedDate] DESC)
FROM tbl
)t
WHERE Rn >= N
ändert Er gedacht in Kommentar erwähnt hatte, es zu Fragen hinzufügen, so dass kein Körper es verpassen.
Sie können 'Group By' zusammen mit' MAX' verwenden, um zu bekommen, was Sie wollen –