2011-09-21 89 views
1

我在一個表中的以下數據:選擇查詢的問題

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列,目前空。

我用它來獲取信息的信息是結構化的,像這樣的表:

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

據我所知,你不需要將所有的字段組合在一起。只需在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 
+0

我做了一些修改。請檢查最新版本 –

+0

如果我不按照我發佈的內容進行分組,則會向我發出錯誤,說我必須對他們進行分組。 – Jessica

+0

you group by tblb.id –