我有一个表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 No和TRAIN_START_DATE对数据进行了分区,但是我无法得出这样的事实:在{的情况下,两个不同的记录如何获得相同的排位{1}}?
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;
我只希望有一行具有my_rank = 1的行,为此我使用了TRAIN_NUMBER TRAIN_START_DATE EVENT_CODE
12987 04-NOV-19 HO
12987 04-NOV-19 TO
。
我应该在查询中应用什么以便只得到一条记录?
答案 0 :(得分:0)
Dense_rank
和rank
将返回相同的数字,只要其order by
子句中的值保持不变。
dense_rank
和rank
之间的区别在于,order by
子句中的值更改后,dense_rank
将返回下一个连续数字,而rank
将返回基于行号的数字。
Row_number
将为分区中的每一行返回不同的数字,而不管分区中order by
列的唯一性如何。
如果按值排序不是唯一的,则row_number
将返回一个任意数字。