SQL выберите самую младшую запись - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть стол. Я хочу выполнить запрос SQL и выбрать самую младшую запись для ID, мне также нужно вывести все остальные столбцы, связанные с самой младшей строкой. В реальной таблице более 500 столбцов.

Обратите внимание, я использую AWS Афина. Таблица не имеет индексов.

ID  COL1    COL2    LAST_UPDATED
1   yyy     ddd     01/01/2020
1   ccc     eee     12/01/2020
2   xxx     ddd     02/01/2020
2   vvv     eee     19/01/2020

Желаемый результат:

ID  COL1    COL2    LAST_UPDATED
1   ccc     eee     12/01/2020
2   vvv     eee     19/01/2020

Ответы [ 3 ]

0 голосов
/ 28 февраля 2020

Я нашел решение использовать ROW_NUMBER() OVER(PARTITION BY

SELECT * 
FROM (
     SELECT id, updated_at, ROW_NUMBER() OVER(PARTITION BY id ORDER BY updated_at desc) rn
     from table t
)
where rn = 1
0 голосов
/ 28 февраля 2020

Попробуйте использовать запрос ниже:

 select * from aws 
 where last_updated in (select max(last_updated) from aws group by id)
0 голосов
/ 28 февраля 2020

Типичным и эффективным способом в большинстве баз данных является использование коррелированного подзапроса:

select t.*
from t
where t.LAST_UPDATED = (select max(t2.LAST_UPDATED)
                        from t t2
                        where t2.id = t.id
                       );

Для производительности требуется индекс (id, LAST_UPDATED).

В базе данных, которая не нет индексов, затем используйте row_nmber():

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