欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

求优化解决方法

更新时间: 2014-01-05 02:11:27 责任编辑: Author_N1

 

求优化
有一个表有,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,感觉比较慢,又没有性能好一点的方法?
--参考方法--
以下方法试验一下性能。

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
--参考方法--
--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)

--参考方法--
select * from (
select a,b,c ,row_number()over(partition by a order by b desc,c desc) num1 from xxxx
) where num1=1

--参考方法--
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;
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:11:27
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6783/
本文WWW.DOC100.NET DOC100.NET版权所有。