2012-05-23 68 views
0

我有一個庫存交易表。我需要選擇最近幾筆交易的日期,直到調整後的數量大於庫存中的當前金額。SUM直到某個點

我處理的三列:item, transaction_date, adj_qty。每個項目將有多個交易日期和調整數量。

我如何退還所有transaction_dates每個項目,直到該項目達到一定的閾值(即累計100)。說的第一個項目有2000個交易和過去五年的交易有各自的21中的數量,我想查詢返回事務中的最後5因爲那是當項目達到100

如果可能的話,我想這樣做沒有循環或光標。

任何人都可以幫忙嗎?

回答

2

你需要的是累計和。這是內置到SQL Server 2012的

唉,有一點,你需要有一個自我做加盟:

select t.item, t.transaction_date, t.adj_qty, 
     sum(tprev.adj_qty) as CumSum 
from t t join 
    t tprev 
    on t.item = tprev.item and 
     t.transaction_date >= tprev.transaction_date 
group by t.item, t.transaction_date, t.adj_qty 
having 100 between sum(tprev.adj_qty) -t.adj_qty + 1 and sum(tprev.adj_qty) 

注意利用自身的加入,並通過組辦的累計總和。不愉快,但必須在SUM()over(partition by)函數中沒有order子句。這個累計總和從第一個記錄(按交易日期)爲一個項目添加到任何其他項目。

HAVING子句然後選擇你正在尋找,那裏的累計值增加該行的推移,一些門限。

+0

哇!這個解決方案非常棒!正是我需要的。非常感謝! – Jill

+0

我只是用這個想法來面對另一個挑戰。這次倒退!減去之前的每一行。再次感謝你的幫助。 – Jill

相關問題