Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何强制秩函数为相等秩的行指定不同的值?_Sql_Sql Server - Fatal编程技术网

Sql 如何强制秩函数为相等秩的行指定不同的值?

Sql 如何强制秩函数为相等秩的行指定不同的值?,sql,sql-server,Sql,Sql Server,我的数据库中有一个类似的表 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 Yea

我的数据库中有一个类似的表

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页面,似乎找不到我要找的内容。有人有什么想法吗?多谢各位

有三个基本选项-在这种情况下,正如其他人所指出的,您应该使用Row_number


基本上,Row_number为行分配一个数字,并且不会复制或跳过值,除非您使用的是分区。Rank允许平局,如果前一个值存在平局,则跳过值。密集列组允许连接,并且不跳过值

我尝试了“密集等级”,它仍然将“1”分配给两行相等的值。我的坏消息是,你试图打破联系。在这种情况下,按照A所说的,使用行号。如果您想要每个id的最新值,则必须使用ORDER BY Year DESC,Quarter DESC谢谢!这是一个很好的选择*,按ID顺序按年份划分的行数,按mytable temp的季度排名,其中排名=1。这是对这三个函数之间差异的一个很好的总结。我知道你可以从手册中得到同样的信息,但我特别喜欢你的简洁,干得好。
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