SQL选择最年轻的记录

时间:2020-02-28 12:57:05

标签: sql amazon-athena

我有一张桌子。我想运行SQL查询并为每个ID选择最年轻的记录,我还需要输出与最年轻的行关联的所有其他列。在实际表中,有500多个列。

请注意,我正在使用AWS Athena。该表没有索引。

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 :(得分:0)

大多数数据库中一种典型且有效的方法是使用相关子查询:

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;

答案 1 :(得分:0)

我找到了使用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

答案 2 :(得分:0)

尝试使用以下查询:

 select * from aws 
 where last_updated in (select max(last_updated) from aws group by id)