برای گرفتن تازهترین سفارش هر مشتری، فقط استفاده از
MAX(OrderDate) کافی نیست؛ چون هنوز باید سایر ستونهای همان ردیف را پیدا کنید و زمانهای مساوی هم میتوانند نتیجه را مبهم کنند.یک الگوی روشن، رتبهدادن داخل هر گروه است:
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY CustomerId
ORDER BY OrderDate DESC, OrderId DESC
) AS rn
FROM Sales.Orders
)
SELECT *
FROM ranked
WHERE rn = 1;
در این مثال فرضی،
PARTITION BY شمارهگذاری را برای هر مشتری جدا میکند. ترتیب نزولی تاریخ، تازهترین سفارش را اول میآورد و OrderId تکلیف زمانهای برابر را روشن میکند.نکته مهم این است که ستونهای
ORDER BY باید ترتیب یکتایی بسازند؛ وگرنه انتخاب ردیف اول میتواند پایدار نباشد.
