oracle Фильтр повторяющихся значений столбцов - PullRequest
1 голос
/ 22 мая 2019

Ниже приведен пример извлечения данных. И я хотел удалить дубликат строки (последний в этом примере), как показано ниже. Мне было интересно, как я могу легко получить это без этой дополнительной записи в запросе выбора

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 Ответ

2 голосов
/ 22 мая 2019

Вы можете выбрать один год для каждого 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, но нет гарантии, что это «самый ранний» ряд. Для этого вам нужен столбец даты или последовательности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...