为什么 dense_rank() 函数将相同的排名分配给不同的记录?
Why is dense_rank() function assigning same rank to different records?
我有一个 table TAB,其结构如下:
create table TAB (
TRAIN_NUMBER varchar2(5),
TRAIN_START_DATE date,
EVENT_CODE varchar2(2),
INTERCHANGE_FLAG number
)
我在其中插入了2条记录
Insert into TAB Values('12987','04-Nov-2019','HO',1);
Insert into TAB Values('12987','04-Nov-2019','TO',1);
我只想要输出中排名为 1 的一行,所以我根据列车编号和 TRAIN_START_DATE 对数据进行了分区,但我无法了解两个不同的记录如何获得在 DENSE_RANK()
?
的情况下排名相同
SELECT TRAIN_NUMBER, TRAIN_START_DATE , EVENT_CODE
FROM (
SELECT TRAIN_NUMBER, TRAIN_START_DATE, EVENT_CODE,
DENSE_RANK() OVER (PARTITION BY TRAIN_NUMBER, TRAIN_START_DATE ORDER BY INTERCHANGE_FLAG) my_rank
FROM TAB
)
WHERE my_rank = 1;
我得到的输出是
TRAIN_NUMBER TRAIN_START_DATE EVENT_CODE
12987 04-NOV-19 HO
12987 04-NOV-19 TO
我只想要 my_rank=1 的一行,为此我使用了 DENSE_RANK()
。
我应该在查询中应用什么才能只获得一条记录?
Dense_rank
和 rank
将 return 相同的数字,只要它的 order by
子句中的值保持不变。
dense_rank
和rank
的区别在于,一旦order by
子句中的值发生变化,dense_rank
就会return下一个连续的数字,而 rank
将 return 一个基于行号的数字。
Row_number
将为分区中的每一行 return 一个不同的数字,而不管分区中 order by
列的唯一性。
如果按值排序不唯一,row_number
将 return 为任意数字。
我有一个 table TAB,其结构如下:
create table TAB (
TRAIN_NUMBER varchar2(5),
TRAIN_START_DATE date,
EVENT_CODE varchar2(2),
INTERCHANGE_FLAG number
)
我在其中插入了2条记录
Insert into TAB Values('12987','04-Nov-2019','HO',1);
Insert into TAB Values('12987','04-Nov-2019','TO',1);
我只想要输出中排名为 1 的一行,所以我根据列车编号和 TRAIN_START_DATE 对数据进行了分区,但我无法了解两个不同的记录如何获得在 DENSE_RANK()
?
SELECT TRAIN_NUMBER, TRAIN_START_DATE , EVENT_CODE
FROM (
SELECT TRAIN_NUMBER, TRAIN_START_DATE, EVENT_CODE,
DENSE_RANK() OVER (PARTITION BY TRAIN_NUMBER, TRAIN_START_DATE ORDER BY INTERCHANGE_FLAG) my_rank
FROM TAB
)
WHERE my_rank = 1;
我得到的输出是
TRAIN_NUMBER TRAIN_START_DATE EVENT_CODE
12987 04-NOV-19 HO
12987 04-NOV-19 TO
我只想要 my_rank=1 的一行,为此我使用了 DENSE_RANK()
。
我应该在查询中应用什么才能只获得一条记录?
Dense_rank
和 rank
将 return 相同的数字,只要它的 order by
子句中的值保持不变。
dense_rank
和rank
的区别在于,一旦order by
子句中的值发生变化,dense_rank
就会return下一个连续的数字,而 rank
将 return 一个基于行号的数字。
Row_number
将为分区中的每一行 return 一个不同的数字,而不管分区中 order by
列的唯一性。
如果按值排序不唯一,row_number
将 return 为任意数字。