问一个关于求最大值的问题
有如下table
InsertDate Num Lv
2007/04/02 1 1
2007/04/02 2 1
2007/01/01 3 1
2007/02/01 6 1
2007/01/01 2 2
要求的是相同Class中InsertDate最近的Num最大的值。
上面的数据的话,结果应该是
2007/04/02 2 1
我的意见是使用rank函数
select * from (select insertdate,num,lv,rank(...) aRank ) where aRank =1...
同事的意见是使用Max函数
select ..,InserDate,Max(Num),lv from tb where InsertDate =(select max(insertDate) from tb group by lv ) from tb group by lv,insertdate
他说如果数据多的时候,我的SQL会慢,我觉得正好相反。
那位大侠评判一下,那个会快些。然后还请帮忙想个效率更高的方法。
------解决方案--------------------select r,a.InsertDate,max(a.Num),a.Lv from (select rownum r,* from (select InsertDate,Num,Lv from table order by InsertDate desc)) a
where r <2;
试试看
------解决方案--------------------lz这个说法有矛盾:
对LV分组,再求同ERTDATE中NUM最大的值,那么:
2007/01/01 3 1
2007/01/01 2 2
分属两组,但又同ERTDATE,那以哪种标准区分其最大?
------解决方案--------------------我想楼主的意思是取最接近的日期
2中方法
1:rownum=1 order by insertdate
2: insertdate=(select max(insertdate) from **)
数据多的时候哪种快?
我现在的工作也有这种问题,以前的人用的方法2(存储过程里面),我也不知道哪种快!
楼下的继续!
------解决方案--------------------你在oracle中看一下执行计划不就比较出来,那一个效率更高了
------解决方案--------------------真的很难知道哪个更快..还是等着看看高手的说法吧
------解决方案--------------------多搞点数据,去PLSQL试试看 那个时间短
------解决方案--------------------路过,观察中
------解决方案--------------------select Num,lv InsertDate,max(num) over (partition by lv order by InsertDate desc) maxNum from tablename order by insertDate Desc