我有一张销售表,上面有个人、日期和数量:
Person Date Qty
Jim 2016-08-01 1
Jim 2016-08-02 3
Jim 2016-08-03 2
Sheila 2016-08-01 1
Sheila 2016-08-02 1
Sheila 2016-08-03 1
Bob 2016-08-03 6
Bob 2016-08-02 2
Bob 2016-08-01 5我可以使用以下代码按日期对前2名进行排名:
/****** Top 2 Salespersons ******/
SELECT *
FROM(
SELECT * ,
ROW_NUMBER() OVER( PARTITION BY [Date]
ORDER BY Qty DESC) N'Rank'
FROM [Coinmarketcap].[dbo].[sales]
GROUP BY [Date], Person, Qty
) AS NewTable
WHERE NewTable.Rank < 3
Person Date Qty Rank
Bob 2016-08-01 5 1
Jim 2016-08-01 1 2
Jim 2016-08-02 3 1
Bob 2016-08-02 2 2
Bob 2016-08-03 6 1
Jim 2016-08-03 2 2我的两个问题是:
1)我如何才能看到每个日期前2名的总数量,例如:
Date Total Qty
2016-08-01 6
2016-08-02 5
2016-08-03 82)如何获得不同等级组的每日总数量,例如:
Date Ranking Group Total Qty
2018-08-01 1-2 6
2018-08-01 3-4 1
2018-08-01 5-6 0
2018-08-02 1-2 5
2018-08-02 3-4 1
2018-08-02 5-6 0
2018-08-03 1-2 8
2018-08-03 3-4 1
2018-08-03 5-6 0发布于 2018-02-13 13:04:31
第一:
SELECT NewTable.Date, Sum(NewTable.Qty)
FROM(
SELECT * ,
ROW_NUMBER() OVER( PARTITION BY [Date]
ORDER BY Qty DESC) N'Rank'
FROM [Coinmarketcap].[dbo].[sales]
GROUP BY [Date], Person, Qty
) AS NewTable
WHERE NewTable.Rank < 3
group by NewTable.Date第二次尝试如下:
SELECT NewTable.Date,
Trunc((NewTable.Rank - 1) / 2) * 2 + 1, -- lower rank
Trunc((NewTable.Rank - 1) / 2) * 2 + 2, -- upper rank
Sum(NewTable.Qty)
FROM(
SELECT * ,
ROW_NUMBER() OVER( PARTITION BY [Date]
ORDER BY Qty DESC) N'Rank'
FROM [Coinmarketcap].[dbo].[sales]
GROUP BY [Date], Person, Qty
) AS NewTable
group by NewTable.Date,
Trunc((NewTable.Rank - 1) / 2) * 2 + 1,
Trunc((NewTable.Rank - 1) / 2) * 2 + 2https://stackoverflow.com/questions/48767136
复制相似问题