说我有一张桌子
StoreID TotalSales Month Year
-- ---------- ----- ----
1 10 1 2012
2 2 1 2012
3 15 1 2012
1 4 2 2012
2 5 2 2012
我需要:对于每个独特的“月/年”,抓住销售额最高的前两个StoreID。
我对如何做到这一点感到茫然。我尝试使用cross apply
,但这似乎不起作用。这一切都在我脑海中,所以希望有人可以给我一个正确方向的推动。
答案 0 :(得分:2)
此查询使用Common Table Expression
和Window Function
来获取行中的所有列。它适用于SQL Server 2005 and up
WITH records
AS
(
SELECT StoreID, TotalSales , Month, Year,
DENSE_RANK() OVER (PARTITION BY Month, Year
ORDER BY TotalSales DESC) rn
FROM tableName
)
SELECT StoreID, TotalSales , Month, Year
FROM records
WHERE rn <= 2