SQL 中的前 N ​​个总和

Sum of Top N in SQL

我有一个销售 table,其中包含人员、日期和数量:

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    8

2)如何获取不同排名组每天的总数量,例如:

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

第一个:

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 + 2