本帖最后由 ybvb 于 2015-03-14 14:37:31 编辑

解决方案 »

  1.   

    楼主试试看这个的结果:
    select a.d_date,a.d_code
    from(
    select a.d_date,a.d_code,ROW_NUMBER()over(partition by a.d_date order by a.tj desc,a.tj1 desc) as row
    from d_test as a 
    inner join(
    select i_shape,sum(sy)/COUNT(ts) as rs 
    from ds_test 
    where d_date>=@S_DATE_E and d_date<=@E_DATE_E 
    and sy>0 --这里直接过滤
    group by i_shape
    ) b on a.i_shape=b.i_shape
    )c where c.row=1 --取一行,不用排序那么多次,也不用取row<=50
      

  2.   

    简单改下SQL效果有限,得根据数据结构(索引)针对实现
    应该需要改善设计外层结果只需要1行,而内层又找了最多50行
      

  3.   

    分页SQL是吧,d_date加个倒序索引,没别的优化方法了