2013-12-17 28 views
1

我有faultdata表,其中包含faultstartrtcclearrtc列。如何從故障時間提取中斷時間

另一個表格是breaktime,其列beakstartrtcbreakendrtc。我想計算不包括休息時間段的故障持續時間的總和。我可以在查詢中實現這一點嗎? 我試圖子查詢

SELECT * FROM faultdata3 
WHERE faultstartrtc=(
    SELECT MAX(faultstartrtc) FROM faultdata3 
    WHERE faultstartrtc <='2013-11-23 11:00:00' 
) 
OR faultclearrtc=(
    SELECT MIN(faultclearrtc) FROM faultdata3 
    WHERE faultclearrtc>='2013-11-23 11:30:00' 
) 

但它返回我行這是最接近這個時候。另外如果它返回

faultstartrtc  faultclearrtc 
2013-11-23 10:30:00 2013-11-23 12:00:00 

那麼如何提取從11點到11點30分這段時間呢?

+0

你能否提供'show create table faultdata3;'和'show create table breaktime;'表格描述?如果可能,請提供樣本數據 – Thibault

+0

你嘗試過什麼嗎?我的回答有什麼幫助嗎? – Thibault

回答

0

如果我理解正確的話,你有這樣的時間表:

10:00 Everything is OK 
10:15 Fault start RTC 
10:30 Break start RTC 
11:00 Break end RTC 
12:00 Fault end RTC 
12:01 Everything is OK 

所以

  • 故障持續時間爲10:15 - > 12:00 = 1h45min
  • 休息時間爲10:30 - > 11:00 = 0h30min
  • 故障 - 中斷時間爲1h45min - 0h30min = 1h15min

因此,這裏是我怎麼看它:

SELECT 
faultstartrtc, 
faultendrtc, 
TIMEDIFF(faultendrtc,faultstartrtc) as faultduration, 

(SELECT TIMEDIFF(breakendrtc,breakstartrtc) as breakduration 
    FROM breaktime 
    WHERE breakstartrtc>faultstartrtc 
    AND breakendrtc<faultendrtc 
) as breakduration, 

TIMEDIFF(
    TIMEDIFF(faultendrtc,faultstartrtc), 
    (SELECT TIMEDIFF(breakendrtc,breakstartrtc) 
     FROM breaktime 
     WHERE breakstartrtc>faultstartrtc 
     AND breakendrtc<faultendrtc 
    ) 
) 
as faultwithoutbreakduration 

FROM faultdata3 
WHERE 
DATE(faultstartrtc) ='2013-11-23' 

WHERE有點隨機,檢測到發生在23日十一月四日故障2013

告訴我,如果你明白我的查詢。