2012-12-04 94 views
0

我在表中有30000行,每10分鐘有20列的時間戳。查找行之間的時間差

timestamp Col1 Col2 Col3 ... col20 

timestamp就像每隔10分鐘一樣。例如:18-05-2012 20:0718-05-2012 20:1718-05-2012 20:27

列有整數或浮點型數據。

我的問題是:我需要找到數據未被記錄在列中的間隙和持續時間。假設列具有值,NULL,NULL,值,值,NULL。它有各自的時間戳。

我需要輸出像NULL值和持續時間(開始時間 - 結束時間)的開始時間和結束時間。

+1

並執行'timestamp'列有什麼數據類型? –

+0

時間戳記數據類型是日期時間(例如:18-05-2012 18:28 ) – Reyaz

回答

1

好吧,據我現在的理解,你想要在任何列沒有記錄的行之間的時間差,對不對?

然後有這樣的嘗試:

SELECT 
yt1.[timestamp] AS StartTime, 
MIN(yt2.[timestamp]) AS EndTime, 
DATEDIFF(s, yt1.[timestamp], MIN(yt2.[timestamp])) AS DifferenceInSeconds 
FROM 
yourTable yt1 
LEFT JOIN yt2 ON yt1.[timestamp] < yt2.[timestamp] 
WHERE 
yt1.Col1 IS NULL 
OR yt1.Col2 IS NULL 
... 
OR yt1.Col20 IS NULL 
OR yt2.Col1 IS NULL 
... 
OR yt2.Col20 IS NULL 
GROUP BY yt1.[timestamp] 

說實話,我不知道,如果這個工程,因爲你沒有提供的樣本數據來了一下週圍玩耍。

爲了獲得時差hh:mm:ss格式的搜索問題在stackoverflow,例如this one

+0

感謝您的回覆,但我也需要時間戳記持續時間。例如,Col1不包含所有NULL值,在某些沒有記錄的地方,如果我們按照您的答案進行查詢,我只會得到時間戳和Col Null值,但是我需要一個時間戳與第二個時間戳之間的持續時間,if值從2012年4月12日2:00到2012年4月12日2:40爲空。我需要40分鐘的時間差,以及空值的startime和endtime的時間戳。空值是隨機的,它可以在任何行中。如果你不清楚,請讓我知道。但是,真的會讓你的回答更加明確 – Reyaz

+0

我試過上面的問題。但我得到錯誤的 – Reyaz

+0

我嘗試了查詢,選擇 DATEDIFF(S,YT1。[時間戳],MAX(YT2。[時間戳])AS DifferenceInSeconds FROM EcstasyAggregateSignals YT1 LEFT JOIN YT2 ON YT1。[時間戳]> yt2。[timestamp] WHERE yt1.DBT IS NULL GROUP BY yt1。[timestamp]但是我收到錯誤信息156,Level 15,State 1,Line 2 關鍵字'AS'附近的語法不正確。 – Reyaz

0

我認爲你應該使用2左聯接:檢測NULL外觀開始,在共同我的回答看起來很像以前的答案:

select distinct max(table2.dt) as startTime, min(table3.dt) as endTime, 
datediff(minute, max(table2.dt), min(table3.dt)) as timeDifference 
from Table_2 table1 
left join Table_2 table2 on table2.dt < table1.dt 
left join Table_2 table3 on table3.dt > table1.dt 
where (table3.tt1 is not NULL and table3.tt2 is not NULL) 
    and (table2.tt1 is not NULL and table2.tt2 is not NULL) 
    and (table1.tt1 is NULL or table1.tt2 is NULL) 
    group by table1.dt, table1.id 
+0

感謝您的回覆,我很困惑table2,table3 ..我只有一個表,請如果表名稱是船舶和列是DBT,長。你能幫我重寫查詢嗎?在此先感謝 – Reyaz

+0

和列名稱作爲時間戳 – Reyaz