【发布时间】:2018-10-25 15:32:41
【问题描述】:
早安,
我现在无法得到我想要的结果。
例如我的代码是
select
a.donor_id AS ID
, a.date_of_record
, RANK() OVER (PARTITION BY a.donor_id,a.date_of_record ORDER BY date_of_record) r_nk
from table a
结果是
ID ----------------Date_of_record-----r_nk
012 12/14/2017 1
012 12/20/2017 1
012 12/20/2017 1
不过我想这样展示
ID ----------------Date_of_record-----r_nk
012 12/14/2017 1
012 12/20/2017 1
012 12/20/2017 2
我不确定为什么上面的代码不起作用,
非常感谢!!!
【问题讨论】:
-
您如何知道 12/20/2017 的哪一行应该排在第一位?从技术上讲,他们是平局,所以他们都是第一名。
-
亲爱的@SQLChao,开枪,你是对的!!!!!!我应该使用 row_number!!!!
-
@supercooldjkazu - 你仍然可以使用
rank(),但前提是你有另一列可以用来打破平局。row_number()也确实如此 - 在没有明确的平局休息的情况下也可以使用,但结果将是不确定的。 (这对于结果集中的那三列并不重要,但无论如何排名并不能告诉你太多......) -
对于 any 分析函数,按同样包含在
partition by中的列(或更一般的表达式)进行排序永远不会有意义。在给定的分区中,该表达式将是常量,因此它不会以任何方式对 分区 进行排序。在尝试任何其他方法之前,请先考虑这一点,并弄清楚您真正需要查询做什么。
标签: sql oracle window-functions