0
讓我簡要地描述一下我試圖萬一有人解決同一問題的一個更優雅的方式。我試圖編寫一個存儲過程,查看數據庫中的銷售訂單,查找同一個客戶多次訂購相同商品的時間,並使用先前訂單間隔的平均值預測訂單的下一個日期相同的項目。下面的查詢將構成臨時表與可能的遊標和運行平均值一起工作的基礎。提高性能適用
到目前爲止查詢我看起來像這樣
SELECT sl.custaccount ,
sl.itemid ,
sl.shippingdaterequested ,
nextdate.shippingdaterequested AS nextshippingdaterequested
FROM salesline AS sl
OUTER APPLY (SELECT TOP 1
sl2.custaccount ,
sl2.itemid ,
sl2.shippingdaterequested
FROM salesline AS sl2
WHERE sl2.shippingdaterequested > sl.shippingdaterequested
AND sl2.custaccount = sl.custaccount
AND sl2.itemid = sl.itemid
GROUP BY sl2.custaccount ,
sl2.itemid ,
sl2.shippingdaterequested
ORDER BY sl2.shippingdaterequested
) AS nextdate
GROUP BY sl.custaccount ,
sl.itemid ,
sl.shippingdaterequested ,
nextdate.shippingdaterequested
該查詢給了我使用表示下一次該項目是由客戶訂購一列中的每個銷售線的一行。如果該列爲NULL,那麼我知道我所在的記錄是最後一次。
的基本問題是,這種查詢方式過於緩慢,它運行良好,如果我去針對單個客戶的時間,返回在第二的成績,但運行鍼對〜10萬級的用戶將需要約27個小時。
我知道基本的問題是,我是外應用,所以它是由激動行處理可能做行,但我不知道的另一種方式讓聽到這將更快的工作了。有什麼想法嗎?