I have a table that looks something like this:
NotificationID NotificationTypeID CreatedOn 5 2 2020-01-27 10:05:33.147 4 13 2020-01-24 15:56:04.437 3 3 2020-01-24 14:16:53.327 2 2 2020-01-24 14:16:53.327 1 1 2020-01-22 15:12:38.663
I want it to be ordered by the CreatedOn field and then NotificationTypeID like this:
NotificationID NotificationTypeID CreatedOn 5 2 2020-01-27 10:05:33.147 2 2 2020-01-24 14:16:53.327 4 13 2020-01-24 15:56:04.437 3 3 2020-01-24 14:16:53.327 1 1 2020-01-22 15:12:38.663
My SQL looks like this:
SELECT
ROW_NUMBER() OVER (PARTITION BY Notification.NotificationTypeID ORDER BY CreatedOn DESC) RowNumber,
Notification.NotificationID,
Notification.NotificationTypeID,
CreatedOn
FROM Notification
ORDER BY RowNumber DESC, CreatedOn DESC
But it gives me the oldest value first:
NotificationID NotificationTypeID CreatedOn 2 2 2020-01-24 11:34:37.063 5 2 2020-01-27 10:05:33.147 4 13 2020-01-24 15:56:04.437 3 3 2020-01-24 14:16:53.327 1 1 2020-01-22 15:12:38.663
Advertisement
Answer
I suspect that you want:
select NotificationID, NotificationTypeID, CreatedOn
from Notification
order by
max(CreatedOn) over(partition by NotificationTypeID) desc,
CreatedOn desc
This will put first the NotificationTypeID that has the greatest CreatedOn, and then order records that have the same NotificationTypeID by descending CreatedOn.