我的表格有两列:Emp_Name
和Emp_NR
。
可能会发生一个Emp_Name
值有2个不同的Emp_NR
值。
我想创建一个SELECT
语句,该语句只能获得Emp_Name
和Emp_NR
声明应该类似于Teradata:
SELECT
Emp_Name,
Emp_NR
FROM Table
QUALIFY Row_Number OVER (PARTITION BY Emp_Name ORDER BY Emp__NR DESC) = 1
除此之外,我希望获得分配给特定Emp_NR
的最高Emp_Name
。
答案 0 :(得分:4)
你做的一切都很正确。
SELECT Emp_NR, Emp_Name
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY Emp_Name ORDER BY Emp_NR DESC) AS RN, Emp_Name, Emp_NR
FROM YourTable
) AS T
WHERE T.RN = 1;
这是正确的语法。
答案 1 :(得分:1)
另一种方法是将ORDER BY
与TOP 1 WITH TIES
结合使用:
SELECT TOP 1 WITH TIES Emp_Name, Emp_NR
FROM Table
ORDER BY ROW_NUMBER() OVER (PARTITION BY Emp_Name ORDER BY Emp_NR DESC);
性能可能比使用子查询的解决方案稍差。