我的数据库中有一个与此类似的表
ID Year Quarter .....
1 2000 3
2 2002 4
1 2003 3
1 2000 3
数据库的关键是ID,年份和季度的组合。我需要获取每个ID的最新条目,所以我使用了像这样的排名函数:
select ID
from
(
select ID, Year, Quarter
RANK() OVER (PARTITION BY ID ORDER BY Year + Quarter) as rank
from myTable
) tmp
where rank = 1
数据库中可能存在具有相同ID,年份和季度的条目。我需要能够选择其中一个而不选择其中一个。我并不特别在乎哪一个,只不过一个。我一直在阅读MSDN页面,我似乎无法找到我要找的东西。有人有主意吗?谢谢。
答案 0 :(得分:4)
有三种基本选项 - 在这种情况下,正如其他人所说,您应该使用Row_number()
。
Value Row_Number Rank Dense_Rank
A 1 1 1
A 2 1 1
B 3 3 2
D 4 4 3
E 5 5 4
基本上,Row_number
会为行分配一个数字,并且不会复制或跳过值(除非您使用的是分区)。 Rank
允许绑定,如果前一个值存在平局,则跳过值。 Dense_Rank
允许绑定,不跳过值。