为什么density_rank()函数将相同的等级分配给不同的记录?

我有一个表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','TO',1);

我只希望在输出中排成一行,排位为1,所以我已经根据Train No和TRAIN_START_DATE对数据进行了分区,但是我无法得出这样的事实:在{的情况下,两个不同的记录如何获得相同的排位{1}}?

DENSE_RANK()

我得到的输出为

SELECT TRAIN_NUMber,TRAIN_START_DATE,EVENT_CODE 
FROM (
  SELECT TRAIN_NUMber,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

我应该在查询中应用什么以便只得到一条记录?

yhgfhgfhgfgfhgfh 回答:为什么density_rank()函数将相同的等级分配给不同的记录?

Dense_rankrank将返回相同的数字,只要其order by子句中的值保持不变。

dense_rankrank之间的区别在于,order by子句中的值更改后,dense_rank将返回下一个连续数字,而rank将返回基于行号的数字。

Row_number将为分区中的每一行返回不同的数字,而不管分区中order by列的唯一性如何。 如果按值排序不是唯一的,则row_number将返回一个任意数字。

See a live demo on SQL Fiddle.

本文链接:https://www.f2er.com/3143744.html

大家都在问