求优化

w860419 2012-06-20 01:32:20
有一个表有,a,b,c3个值
现在要求,a对应的最大的b中的最大的c的那条数据

例如
a b c
1 1 3
1 2 1
1 2 2
2 1 1
2 2 1

结果要
a b c
1 2 2
2 2 1

我现在嵌套两个max,感觉比较慢,又没有性能好一点的方法?
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
w860419 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

多谢大家,虽然性能都不错,但结合实际实验了下,还是3楼的最快。
采用了3楼,其他的也多谢了。
[/Quote]

抱歉,说错了,是2楼的。。。
w860419 2012-06-21
  • 打赏
  • 举报
回复
多谢大家,虽然性能都不错,但结合实际实验了下,还是3楼的最快。
采用了3楼,其他的也多谢了。
小德 2012-06-20
  • 打赏
  • 举报
回复
WITH t AS(
SELECT 1 a,1 b,3 c FROM dual
UNION
SELECT 1 ,2 ,1 FROM dual
UNION
SELECT 1,2 ,2 FROM dual
UNION
SELECT 2 ,1 ,1 FROM dual
UNION
SELECT 2 ,2 ,1 FROM dual
)
SELECT DISTINCT a
,Last_Value(b) over (PARTITION BY a ORDER BY b rows between unbounded preceding and unbounded following) b
,Last_Value(c) over (PARTITION BY a ORDER BY b,c rows between unbounded preceding and unbounded following) c
FROM t;
reg13141 2012-06-20
  • 打赏
  • 举报
回复
select * from (
select a,b,c ,row_number()over(partition by a order by b desc,c desc) num1 from xxxx
) where num1=1
yinan9 2012-06-20
  • 打赏
  • 举报
回复
--S3为表名
SELECT *
FROM S3 T1
WHERE T1.B > = ALL (SELECT T2.B FROM S3 T2 WHERE T2.A = T1.A)
AND T1.C >= ALL (SELECT T3.C
FROM S3 T3
WHERE T3.A = T1.A
AND T3.B = T1.B)
阿冷 2012-06-20
  • 打赏
  • 举报
回复
以下方法试验一下性能。

select
b.a,
b.d,
max(b.c) e
from
(
select
a.a,
a.b,
a.c,
max(a.b) over(partition by a.a order by a.a) d
from
table_a a
) b
where b.b=b.d
group by
b.a,b.d

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧