2014-03-03 64 views
0

我們每隔一秒存儲系統的實驗數據。我們還將Date-Time,system_ON_Status和其他參數一起存儲。根據一天中的要求(可能是3-4次)打開系統。如何獲得兩行之間的差異

現在我們需要生成查詢來顯示實驗的開始和結束時間。

system_ON_Status字段在SQL中作爲布爾值存儲。

對於ON爲真,對於爲False爲False。

感謝

我們使用SQL Server 2008 R2

Date_Time     System_ON_Status 
2014-03-04 16:01:01:000  0 
2014-03-04 16:01:02:000  0 
2014-03-04 16:01:03:000  0 
2014-03-04 16:01:04:000  0 
2014-03-04 16:01:05:000  1 
2014-03-04 16:01:06:000  1 
2014-03-04 16:01:07:000  1 
2014-03-04 16:01:08:000  1 
2014-03-04 16:01:09:000  1 
2014-03-04 16:01:10:000  0 
2014-03-04 16:01:11:000  0 
2014-03-04 16:01:12:000  1 
2014-03-04 16:01:13:000  1 
2014-03-04 16:01:14:000  1 
2014-03-04 16:01:15:000  1 
2014-03-04 16:01:16:000  0 
2014-03-04 16:01:17:000  0 
2014-03-04 16:01:18:000  0 
2014-03-04 16:01:19:000  1 
2014-03-04 16:01:20:000  1 
2014-03-04 16:01:21:000  1 
2014-03-04 16:01:22:000  1 
2014-03-04 16:01:23:000  1 
2014-03-04 16:01:24:000  1 

的輸出必須爲:01:05:000 和實驗16結束 1)實驗,即16的開始: 01:09:01:05:000 - 16:16之間的差異:000 系統是爲操作01:09:000 4秒

2)實驗,即16的開始時間:01:12:000 和實驗結束16:01:15:000 系統運行於:16:01:05:000 - 16:01:09:000之間的差異3秒

2)實驗開始即16: 01:19:000 和實驗結束16:01:24:01:05:000 - 16:16之間的差異:000 系統是爲操作01:09:000 5秒

+1

您可能想詳細說明您的數據結構,以便人們可以更好地幫助您。話雖如此,你可能想看看聚合函數,所以搜索'GROUP BY'並使用'MIN'/'MAX'來確定開始和結束時間可能會起作用 – talegna

+1

您正在使用哪些DBMS? Postgres的?甲骨文? –

+0

'從表'中選擇max(Time),min(Time),max(Time)-min(Time)作爲Time_GAP? –

回答

0

下面的查詢給出了你每個實驗的開始和結束時間。它包括system_on_status變回零的時間,因爲這是實驗結束的確認。在上次實驗中,它尚未結束(system_on_status沒有零),因此結束時間爲NULL。從這個

SELECT FromTime = MIN(D.log_date) 
     ,X.ToTime 
     ,D.system_on_status 
FROM Experiment_Log D 
     OUTER APPLY (SELECT TOP 1 
           ToTime = D2.log_date 
         FROM  Experiment_Log D2 
         WHERE  D.log_date < D2.log_date 
           AND D.[system_on_status] <> D2.[system_on_status] 
         ORDER BY D2.log_date 
        ) X 
WHERE D.system_on_status = 1 
GROUP BY X.ToTime 
     ,D.system_on_status 
ORDER BY FromTime; 

輸出爲您的數據:

FromTime    ToTime    system_on_status 
2014-03-04 16:01:05 2014-03-04 16:01:10 1 
2014-03-04 16:01:12 2014-03-04 16:01:16 1 
2014-03-04 16:01:19 NULL     1 

我真的不能要求這方面的任何榮耀,我把查詢從this excellent answer,並修改了它爲你的表。所以,如果你想投票決定讓ErikE成爲代表! :)

相關問題