选择查询问题

时间:2011-09-21 17:59:07

标签: sql sql-server-2005

我在表格中有以下数据:

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匹配的第一个持续时间,其中我想要那些时间帧之间所有持续时间的总和。如果我不清楚,请告诉我。

1 个答案:

答案 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