2017-05-25 144 views
1

我有ROW_NUMBER函数,我正在使用获取最新的记录,但该函数中的Order by似乎没有工作。不知道我做错了什么。结果表排序By Row_number not working properly

SELECT *, 
ROW_NUMBER() OVER(PARTITION BY EmployeeID, DepartmentID ORDER BY PayDate, WorkDate desc) AS CurrentFlag 
FROM test 

例子:

EmployeeID | DepartmentID | Balance | PayDate | WorkDate | CurrentFlag 
123   1    200  1/3/2017 12/22/2016 1 
123   1    300  1/3/2017 12/23/2016 2 
123   1    500  1/5/2017 12/24/2016 3 

我应该得到:

EmployeeID | DepartmentID | Balance | PayDate | WorkDate | CurrentFlag 
123   1    200  1/3/2017 12/22/2016 3 
123   1    300  1/3/2017 12/23/2016 2 
123   1    500  1/5/2017 12/24/2016 1 

我不知道我在我的ROW_NUMBER功能做错了。我订购PayDate,然后WorkDate降序,所以我应该得到CurrentFlag = 1为最新WorkDate这是12/24/2016。我在这里错过了什么吗?

回答

1

每个ORDER BY项目是分开处理的,除非另有说明,否则他们正在考虑ASC

看样子你想这两个项目是DESC,所以尝试:

ROW_NUMBER() OVER(PARTITION BY EmployeeID, DepartmentID 
        ORDER BY PayDate desc, WorkDate desc) 
+0

OMG太感谢你了,我不知道你有指定的顺序为每列 – Stephanie

+0

@Stephanie嘿没有问题,快乐编码:) –