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

sql语句问题,取最大值问题
表结构     yd_ls_db
hh                 dfny       sfpc
20003093 200505 1
20003093 200506 1
20003093 200507 1
20003093 200510 1
20003093 200704 1
20002994 200001 1
20002994 200111 1
20002994 200112 1
20002994 200201 1
20002994 200202 1
20002994 200203 1
----------------------------
现在我想根据hh     取最大的dfny   的一条记录   ,比如上面的查询结果就是
20003093 200704 1
20002994 200203 1
--------------------------------------------
yd_ls_db   中数据量比较大,基本上在500万左右,我用这个语句
select   *   from   yd_ls_db   where   (hh,dfny)   in   (
select   hh,max(dfny)   dfny   from   yd_ls_db   group   by   hh);
速度非常慢.
用这个语句      
select   hh,dfny,sfpc  
from   (
      select   hh,dfny,sfpc,
            rank()   over   (order   by   dfny   desc)   add_rank
      from   yd_ls_db
)
where   add_rank   =   1;
速度也好不到哪里去,哪个高人指导一下
-----------------------


------解决方案--------------------
把你的in换成exists试试,不能保证能快,和你表的索引设置也有关系,只能试试吧.
select * from yd_ls_db t1 where exists (select 'X ' from
(select hh,max(dfny) dfny from yd_ls_db group by hh )
where hh=t1.hh and dfny=t1.dfny);
------解决方案--------------------
索引建了吗
------解决方案--------------------
这样不行吗
select t.hh,max(t.dfny),max(t.sfpc) from sql_0829 t group by t.hh