Выберите новейшие данные с идентификатором A - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть такие данные:

ID  TRANS_ID  CREATED_DATE             STATUS
----------------------------------------------
1   AA        2017-05-19 02:00:00      WAITING
2   AA        2017-05-20 02:00:00      IN_PROCESS
3   BB        2017-05-19 02:00:00      WAITING
4   CC        2017-05-19 02:00:00      WAITING
5   CC        2017-05-20 02:00:00      IN_PROCESS

Я хотел бы показать данные в табличном представлении, как этот:

ID  TRANS_ID  CREATED_DATE             STATUS
----------------------------------------------
2   AA        2017-05-20 02:00:00      IN_PROCESS
3   BB        2017-05-19 02:00:00      WAITING
5   CC        2017-05-20 02:00:00      IN_PROCESS

Я беру новейшие данные с каждого trans_id и я запускаю этот запрос, но он не работает

select id, max(created_date), trans_id, status
from table_a
group by a.transaction_id

1 Ответ

0 голосов
/ 16 апреля 2020

Один из вариантов - фильтрация с помощью коррелированного подзапроса:

select t.*
from mytable t
where t.created_date = (
    select max(t1.created_date) from mytable t1 where t1.trans_id = t.trans_id
)

В качестве альтернативы вы можете использовать оконные функции:

select id, trans_id, created_date, status
from (
    select t.*, rank() over(partition by trans_id order by created_date desc) rn
    from mytable t
) t
where rn = 1

Это позволяет использовать верхние связи, если таковые имеются. Если вы не хотите галстуков, вы можете использовать row_number() вместо rank().

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