我試圖創建從我們的數據中的現有記錄挖掘聚合的子記錄。我有一個列出記錄的表格,其中列出了與每個記錄上的行爲相關的一對多關係。 記錄表看起來像這樣:使多個子組聚合
Key OpenDate LastUpdate
aa 1/1/2015 1/14/2015
bb 1/3/2015 1/15/2015
行動表看起來像這樣:
Key Date Action
aa 1/1/2015 Working
aa 1/4/2015 Escalated
aa 1/5/2015 Done
aa 1/6/2015 Working
aa 1/7/2015 Done
aa 1/13/2015 Done
aa 1/14/2015 Working
bb 1/3/2015 Working
bb 1/4/2015 Working
bb 1/5/2015 Escalated
bb 1/6/2015 Working
bb 1/7/2015 Done
bb 1/13/2015 Working
bb 1/15/2015 Done
我希望能夠創建一個行中的每個記錄被「做」一次注意到開局和該週期的結束,並計算該範圍內的一些項目:
Key SubID DateBegin DateEnd #Actions #Escalations
aa 1 1/1/2015 1/5/2015 3 1
aa 2 1/6/2015 1/7/2015 2 0
aa 3 1/13/2015 1/13/2015 1 0
aa 4 1/14/2015 null 1 0
bb 1 1/3/2015 1/7/2015 5 1
bb 2 1/13/2015 1/15/2015 2 0
基本上,邏輯是一個子記錄結束時的動作值=「完成」,和一個新的子記錄初學者ns的任何後續行動(也是第一個行動)。
我看到一個解決方案只適用於一個記錄的數據here,但不止一個給我的問題。 我與SQL Server 2008工作
更新 - 我有多個記錄返回,但最新數據似乎不正確 - 不知道它變得什麼是應該到:
SELECT Key, Cycles.CYCLE_BEGIN_DATE, Cycles.CYCLE_END_DATE, Cycles.NUM_ACTIONS_IN_CYCLE
FROM Records
FULL OUTER JOIN
(select e.Key, min(Date) as CYCLE_BEGIN_DATE,
max(case when Action = 'Done') then Date end) as CYCLE_END_DATE,
count(*) as NUM_ACTIONS_IN_CYCLE
from (select Key, Action, rowID = ROW_NUMBER() OVER (PARTITION BY Key ORDER BY Date asc), Date
from Actions
) e
outer apply
(select count(*) as grp
from (SELECT Key, rowID = ROW_NUMBER() OVER (PARTITION BY Reason_Key ORDER BY Date asc), Date, Action
FROM Actions
) e2
where e2.Date < e.Date and e2.Action = 'Done' and e.Reason_Key = e2.Reason_Key
) e2
group by e.Reason_Key, e2.grp
) CYCLES
on Records.Key = Cycles.Key
爲什麼您的上一個問題顯示索引列,而這個索引列不在您的操作表中?此表是從那以後更新的嗎? – FutbolFan
@ Rookie13 - 我認爲這將有助於溝通需求,但沒有用 - 我需要做的事情的現實更好地體現在這裏。 – csupak