多最大值
我知道标题听起来不是很描述性的,但它是我能想到的最好的:多最大值
我有这个表
ID BDATE VALUE 28911 14/4/2009 44820 28911 17/4/2009 32240 28911 20/4/2009 30550 28911 22/4/2009 4422587,5 28911 23/4/2009 4441659 28911 24/4/2009 7749594,67 38537 17/4/2009 58280 38537 20/4/2009 137240 38537 22/4/2009 81098692 38605 14/4/2009 2722368 38605 20/4/2009 5600 38605 22/4/2009 1625400 38605 23/4/2009 6936575
这实际上是一个非常复杂的查询封装在视图中,但现在不属于这个问题。
我想为每个ID,包含最高BDate的行。在这个例子中,这将是结果。
ID BDATE VALUE 28911 24/4/2009 7749594,67 38537 22/4/2009 81098692 38605 23/4/2009 6936575
我已经尝试
select id, max(bdate), value from myview group by id, value
但随后返回所有行,因为每个值collumn是不同的。这个查询是在Oracle v10中设计的,我有资格只使用select查询而不是创建过程。
select id, bdate, value
from myview
where (id, bdate) in
(select id, max(bdate)
from myview group by id)
/
你会如何为该查询添加另一个条件 - 比如'AND value> 500'? – kerosene 2016-05-26 07:48:52
select a.* from myview a, (select id, max(bdate) from myview group by id) b
where a.id = b.id and a.bdate = b.bdate
它不返回数值列表,我想 – kurast 2009-11-04 13:46:47
修正了这个问题。当然,未经测试。 – 2009-11-04 13:48:13
SELECT id, bdate, value FROM myview
WHERE (id, bdate) IN (SELECT id, MAX(bdate) FROM myview GROUP BY id)
(未经测试...我没有甲骨文提供现在...)
您可以使用分析:
select
id, bdate, value
from
(
select
id, bdate, value, max(bdate) over (partition by id) max_bdate
from
myview
)
where
bdate = max_bdate
您可以使用INNER JOIN只筛选出最大行数:
select t.*
from YourTable t
inner join (
select id, max(bdate) as maxbdate
from YourTable
group by id
) filter
on t.id = filter.id
and t.bdate = filter.maxbdate
个
此打印:
id bdate value
38605 2009-04-23 6936575
38537 2009-04-22 81098692
28911 2009-04-24 7749594.67
注意,这将返回多行对于具有与同bdate多个值的ID。
可以使用MAX...KEEP(DENSE_RANK FIRST...)
结构:
SQL> SELECT ID,
2 MAX(bdate) bdate,
3 MAX(VALUE) KEEP(DENSE_RANK FIRST ORDER BY bdate DESC) VALUE
4 FROM DATA
5 GROUP BY ID;
ID BDATE VALUE
---------- ----------- ----------
28911 24/04/2009 7749594,67
38537 22/04/2009 81098692
38605 23/04/2009 6936575
这将是由Majkel建议(无自连接,对数据的单次)的分析方法,有效
感谢所有回答家伙。 – kurast 2009-11-04 16:44:31
暗黑破坏神II - 库拉斯特码头? – CheeseConQueso 2009-11-04 17:23:34
是的,我的名字来自暗黑破坏神II。库拉斯特码头。 发音时库拉斯特这个词听起来很棒,我不忍心使用它。 – kurast 2009-11-04 21:27:36