我有一张桌子。我想运行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
答案 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)