2010-11-29 61 views
2

我有一個表(其中包括)時間戳列(名爲timestamp;它是一個標準的Oracle DATE數據類型)。記錄大約需要4-11分鐘,每小時記錄大約7或8條記錄,並且我試圖確定是否有任何模式。記錄之間的時間差

是否有一種簡單的方法可以查看每條記錄,以及記錄在上一條記錄之後發生的分鐘數?

感謝, AndyDan

回答

8

這是Oracle 9i中+,使用LAG function獲得先前時間戳值,而無需自連接:

SELECT t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp) AS diff 
    FROM YOUR_TABLE t 

...但因爲整個數字代表結果的天數,一個差少於24小時將是一小部分。而且,如果沒有較早的值,LAG將返回NULL - 與使用OUTER JOIN相同。

要查看分鐘,使用ROUND函數:

SELECT ROUND((t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp)) *1440) AS diff_in_minutes 
    FROM YOUR_TABLE t 
1

如果這些記錄有連續的id,你可以做一個自我加入這樣的:

SELECT t2.*, t2.timestamp - t1.timestamp AS timediff 
FROM foo t1 inner join foo.t2 on t1.id = t2.id-1 

你可能需要調整這個處理第一個和最後一個記錄,但這是基礎知識。

+0

不幸的是,沒有ID,順序或其他。排序記錄的唯一可靠方法是按時間戳。謝謝,不過。 – AndyDan 2010-11-29 22:22:59

+0

即使存在,也不能保證它們始終是順序的 - 時間戳值可能會後退,但id值是最新的。 – 2010-11-29 22:29:32