oracle过滤重复的列值

时间:2019-05-22 01:53:15

标签: sql oracle

下面是我的样本数据摘录。而且我想删除重复的行(在本示例中为最后一行),如下所示。我想知道如何在选择查询中没有多余的记录的情况下轻松获取它

ID   YEAR  CNT   VOLUME  INT_VOLUME  RATE   INT_RATE  GM     GM_RCNT
545  2016   12    5508     5508      1604    1604     0.71   NULL
545  2017   5     1138     2731      824     1977     0.28   -50.42
545  2018   NULL  NULL     -45       2351    NULL     NULL   NULL
626  2016   12    679862   679862    252693  252693   0.63   NULL
626  2017   12    705365   705365    282498  282498   0.6    3.75
626  2018   12    707472   707472    291762  291762   0.59   0.3
626  2018   NULL  NULL     711372    NULL    295186   NULL   NULL --Filter such rows in select

1 个答案:

答案 0 :(得分:2)

您可以使用id为每个row_number()选择一年:

select t.*
from (select t.*,
             row_number() over (partition by id, year order by id) as seqnum
      from t
     ) t
where seqnum = 1;

这将选择保留任意行。您可以调整order by以细化您要保留的行。您可以按rowid订购,但不能保证它是“最早”的行。为此,您需要一个日期或序列列。