我试图创建从我们的数据中的现有记录挖掘聚合的子记录。我有一个列出记录的表格,其中列出了与每个记录上的行为相关的一对多关系。 记录表看起来像这样:使多个子组聚合
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