日期:2014-05-17  浏览次数:20815 次

问一个关于求最大值的问题
有如下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