Oracle Sql:仅通过ID和日期选择最新记录

问题描述 投票:1回答:1

我的桌子看起来像这样:

ID       FROM     WHEN
1        mario    24.10.19
1        robin    23.10.19
2        mario    24.10.19    
3        robin    23.10.19
3        mario    22.10.19   

我只想要ID中的最新记录。因此结果应如下所示:

ID       FROM     WHEN
1        mario    24.10.19
2        mario    24.10.19    
3        robin    23.10.19

我不知道如何得到这个结果

sql oracle greatest-n-per-group
1个回答
2
投票
有多种方法。对于Oracle中只有三列,group by祝我好运:

select id, max("from") keep (dense_rank first order by "when" desc) as "from", max("when") as when from t group by id;

在这种情况下,关联的子查询通常在(id, when)上具有索引时表现良好。

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

并且规范的解决方案是使用窗口函数:

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

Oracle有一个智能的优化器,但这需要做更多的工作,因为在过滤之前,行号已分配给

all行。这可能会使它(在某些数据库中)比其他方法慢一点,但是它仍然是一个非常可行的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.