我在表格中有以下数据:
Date ID Start END Duration_S Duration_A
9/12/2011 22216 9/12/2011 12:30:00 PM 9/12/2011 2:15:00 PM 6300 NULL
9/12/2011 22216 9/12/2011 2:30:00 PM 9/12/2011 2:39:00 PM 540 NULL
9/12/2011 22216 9/12/2011 5:20:00 PM 9/12/2011 5:50:00 PM 1800 NULL
我的目标是更新Duration_A列,目前为Null。
我用来获取该信息的信息是一个如下结构的表:
ID Start_Time State End_Time State_Duration
22216 6/3/10 2:07:58 1 6/3/10 2:20:58 800
22216 6/3/10 2:21:58 2 6/3/10 2:25:55 52
22216 6/3/10 5:21:58 2 6/3/10 5:31:05 600
要更新我的Duration_A,我必须将包含某些状态的持续时间相加(这没有问题),但问题是Start_Time和End_Time必须匹配我的第一个表的开始和结束。这就是我在做的事情:
SELECT tblB.ID, SUM(tblB.StateDuration) AS Total, tblA.Start_Time,
tblA.End_Time
FROM
tblA INNER JOIN tblB ON tblB.Id = tblA.ID
tblB.Start_Time >= tblA.Start AND
tblB.End_Time <= tblA.End
WHERE STATE IN (1, 2, 3, 4, 5, 6, 7, 10, 11)
GROUP BY tblB.StateDuration, tblB.Id, tblA.Start_Time,
tblA.End_Time,tblB.End_Time,
tblB.Start_Time
这给了我tblB的开始和结束时间与tblA匹配的第一个持续时间,其中我想要那些时间帧之间所有持续时间的总和。如果我不清楚,请告诉我。
答案 0 :(得分:0)
据我所知,你不需要按所有字段分组。只需在WHERE子句中添加更多条件:
SELECT tblB.ID, SUM(tblB.StateDuration) AS Total, tblA.Start_Time,
tblA.End_Time
FROM
tblA INNER JOIN tblB ON tblB.Id = tblA.ID
tblB.Start_Time >= tblA.Start AND
tblB.End_Time <= tblA.End
WHERE STATE IN (1, 2, 3, 4, 5, 6, 7, 10, 11) AND
tblA.Start_Time <= tblB.Start_Time AND
tblB.End_Time <= tblA.End_Time
GROUP BY tblB.id