Принятие значения с учетом последней измененной даты - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть следующие столбцы, в которых мне нужно взять самое последнее удостоверение личности с учетом самой последней даты внесения поправки.Например, я использовал NVL (updated_Date, Date) в качестве даты, но не уверен, как теперь взять соответствующий идентификатор.Столбец Код - это тот, который я использую для ссылки на отдельную таблицу.

+--------------------------------------------+
| ID  |  DATE    |   UPDATED_DATE |   CODE   |
+--------------------------------------------+
| 123 | 1/2/2019 |                |   987    |
| 456 | 1/1/2019 |    2/4/2019    |   654    |
| 789 | 1/1/2019 |                |   654    |
+--------------------------------------------+

В идеале я хотел бы получить:

+----------------+
| ID  |   CODE   |
+----------------+
| 123 |   987    |
| 456 |   654    |
+----------------+

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Предполагая, что вам нужна первая строка для каждого CODE, который имеет самую последнюю UPDATED_DATE, вы можете использовать аналитическую функцию ROW_NUMBER():

Oracle Setup :

CREATE TABLE table_name ( ID, "DATE", UPDATED_DATE, CODE ) AS
SELECT 123, DATE '2019-02-01', NULL,              987 FROM DUAL UNION ALL
SELECT 456, DATE '2019-01-01', DATE '2019-04-02', 654 FROM DUAL UNION ALL
SELECT 789, DATE '2019-01-01', NULL,              654 FROM DUAL;

Запрос :

SELECT ID, CODE
FROM   (
  SELECT t.*,
         ROW_NUMBER()
           OVER ( PARTITION BY code
                  ORDER BY UPDATED_DATE DESC NULLS LAST ) AS rn
  FROM   table_name t
)
WHERE rn = 1;

Вывод :

 ID | CODE
--: | ---:
456 |  654
123 |  987

дБ<> скрипка здесь

0 голосов
/ 26 сентября 2019

В Oracle вы можете использовать агрегацию и keep:

select code,
       min(id) keep (dense_rank first_value order by updated_date desc nulls lat) as id
from t
group by code;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...