У меня есть table
, как показано ниже -выберите Top N записей для каждого объекта
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
Теперь, я хочу top 1
row
, основанный на date column
для каждого device_ID
Ожидаемый выход
ID | Reported Date | Device_ID
-------------------------------------------
1 | 2016-03-09 09:08:32.827 | 1
4 | 2016-03-10 09:08:32.827 | 2
Я использую SQL Server 2008 R2
. я могу пойти и написать Stored Procedure
, чтобы обработать его, но хотел сделать это с простым запросом.
**************** EDIT **************************
ответа на этот вопрос «Феликса Pamittan» работала хорошо, но для «N» просто изменить его
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
Он упомянул об этом в комментарии думали, чтобы добавить его вопросы так, что ни один орган не пропустите его.
Вы можете использовать 'Group By' вместе с' MAX', чтобы получить то, что вы хотите –