为每个rownumber选择前10名

时间:2015-05-19 17:38:49

标签: sql sql-server query-optimization sql-server-2014 window-functions

查询#1为每个滑动返回数千行。我想知道是否有更快的方法只为每个滑行选择前10名。查询#2很慢。有没有什么方法可以在查询#1中进行优化以使其更快?

查询#1

select skid, date_run, price, ROW_NUMBER()over(PARTITION BY 
skid ORDER BY date_run ASC) as rowid 
from stocktrack where rsi is null

查询#2

with ctevalue
(select skid, date_run, price, ROW_NUMBER()over(PARTITION BY 
skid ORDER BY date_run ASC) as rowid 
from stocktrack where rsi is null
)
select skid, date_run rowid
from ctevalue
where rowid < 11

2 个答案:

答案 0 :(得分:0)

你试过吗

select 
  * 
from
  (select 
    skid, date_run, price, ROW_NUMBER() over (PARTITION BY skid ORDER BY date_run ASC) as rowid 
  from 
    stocktrack where rsi is null) data
where
  data.rowid < 11

希望这有帮助

答案 1 :(得分:0)

尝试使用cross apply

select st.skid, st.date_run, st.price
from sktable sk cross apply
     (select top 10 st.*
      from stocktrack st2
      where st2.skid = sk.skid and
      order by date_run asc
     ) st

以及stocktrack(skid, date_run, price)上的索引。

第一个表格是skid所指的位置。如有必要,您可以尝试(select distinct skid from stocktrack st)