按日期和数量排名 SQL

Rank by Date and Qty in SQL

我有一个名为 SALES 的 table,还有 PersonDateQty

Person  Date       Qty
Jim     2016-08-01  1
Jim     2016-08-02  3
Jim     2016-08-03  1
Bob     2016-08-01  5
Bob     2016-08-02  1
Bob     2016-08-03  6
Sheila  2016-08-01  4
Sheila  2016-08-02  0
Sheila  2016-08-03  2

我希望按每个日期的数量进行排名,输出如下:

Person  Date       Qty    Rank
Bob     2016-08-01  5      1
Sheila  2016-08-01  4      2
Jim     2016-08-01  1      3
Jim     2016-08-02  3      1
Bob     2016-08-02  1      2
Sheila  2016-08-02  0      3
Bob     2016-08-03  6      1
Sheila  2016-08-03  2      2
Jim     2016-08-03  1      3

如何使用此处的排名功能?

试试这个

DECLARE @SALES TABLE(
Person NVARCHAR(50),
[Date] NVARCHAR(50),
Qty INT
)

INSERT INTO @SALES VALUES('Jim','2016-08-01',1)
INSERT INTO @SALES VALUES('Jim','2016-08-02',3)
INSERT INTO @SALES VALUES('Jim','2016-08-03',1)
INSERT INTO @SALES VALUES('Bob','2016-08-01',5)
INSERT INTO @SALES VALUES('Bob','2016-08-02',1)
INSERT INTO @SALES VALUES('Bob','2016-08-03',6)
INSERT INTO @SALES VALUES('Sheila','2016-08-01',4)
INSERT INTO @SALES VALUES('Sheila','2016-08-02',0)
INSERT INTO @SALES VALUES('Sheila','2016-08-03',2)



SELECT * ,
ROW_NUMBER() OVER( PARTITION BY [Date] 
ORDER BY Qty DESC) N'Rank' 
FROM @SALES 
GROUP BY [Date], Person, Qty
ORDER BY [Date] ASC,Qty DESC

结果


==============================================
更新:select每天前 2 名

SELECT * 
FROM(
    SELECT * ,
    ROW_NUMBER() OVER( PARTITION BY [Date] 
    ORDER BY Qty DESC) N'Rank' 
    FROM @SALES 
    GROUP BY [Date], Person, Qty
    ) AS NewTable
WHERE NewTable.Rank  < 3

结果

注意:
不能直接使用WHERE Rank < 3,因为WHERE子句在SELECT语句之前,WHERE子句不能识别Rank列。你必须使用子查询。