[英]Row_Number() Over Partition - Easier Way
I have the below query: 我有以下查询:
INSERT into @TEST (col1,staffnumber,rn)
SELECT starttime as col1,staffnumber,ROW_NUMBER() OVER (PARTITION BY StaffNumber ORDER BY STARTTIME DESC) AS rn
FROM @TempTable2 t2
UNION
SELECT eventdate as col1, staffnumber,ROW_NUMBER() OVER (PARTITION BY StaffNumber ORDER BY EVENTDATE DESC) AS rn
FROM @TempTable1 t1
But, obviously, this gives me the following values: 但是,显然,这给了我以下值:
COL1 | staffnumber | rn
10/02/2014 10:29:24 1 1
10/02/2014 09:08:19 1 3
10/02/2014 10:00:23 1 2
10/02/2014 10:00:29 1 1
Whereas, I need it to show: 而我需要它来显示:
COL1 | staffnumber | rn
10/02/2014 10:29:24 1 1
10/02/2014 09:08:19 1 4
10/02/2014 10:00:23 1 3
10/02/2014 10:00:29 1 2
I can do this by doing the following: 我可以通过执行以下操作来做到这一点:
INSERT into @TEST1 (col1,staffnumber,rn)
SELECT convert(time,col1),staffnumber,ROW_NUMBER() OVER (PARTITION BY StaffNumber ORDER BY convert(time,COL1) DESC) AS rn
FROM @TEST
But there must be an easier more efficient way of doing it. 但是必须有一种更简单,更有效的方法。 Any ideas?
有任何想法吗?
Compute the ROW_NUMBER
after the UNION
. 在
UNION
之后计算ROW_NUMBER
。
SELECT *, ROW_NUMBER() OVER (PARTITION BY StaffNumber ORDER BY STARTTIME DESC) AS rn
FROM (
SELECT * FROM T1
UNION ALL
SELECT * FROM T2
) x
I suspect you need UNION ALL
. 我怀疑您需要
UNION ALL
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.