楼主试试看这个的结果: 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
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
应该需要改善设计外层结果只需要1行,而内层又找了最多50行