小编典典

查询中的多个最大值

sql

我知道标题听起来描述性不强,但这是我能想到的最好的:

我有这张桌子

ID BDATE VALUE
28911 2009年4月4日44820
28911 2009年4月17日32240
28911 20/4/2009 30550
28911 22/4/2009 4422587,5
28911 23/4/2009 4441659
28911 2009年4月24日7749594,67
38537 2009年4月17日58280
38537 2009年4月20日137240
38537 2009年4月22日81098692
38605 2009年4月14日2722368
38605 2009年4月20日5600
38605 22/4/2009 1625400
38605 23/4/2009 6936575

实际上,这是封装在视图中的非常复杂的查询,但现在已不再重要。

我想为每个ID包含最高BDate的行。在此示例中,这将是结果。

ID BDATE VALUE
28911 2009年4月24日7749594,67
38537 2009年4月22日81098692
38605 23/4/2009 6936575

我已经尝试过

select id, max(bdate), value from myview group by id, value

但随后它返回所有行,因为对于每个值,列均不同。该查询是在Oracle v10中设计的,我有资格仅使用选择查询而不创建过程。


阅读 234

收藏
2021-03-23

共1个答案

小编典典

我们可以在IN子句中使用乘法列:

select id, bdate, value 
from myview 
where (id, bdate) in
    (select id, max(bdate)
     from myview group by id)
/
2021-03-23