2016-10-19 21 views
0
M Qty TStamp DStamp 
VF6 1 11:34:38 AM 8/11/2016 11:34:38 AM 
VF6 1 1:06:01 PM 8/11/2016 1:06:01 PM 
VF6 1 2:16:30 PM 8/11/2016 2:16:30 PM 
VF6 1 3:30:20 PM 8/11/2016 3:30:20 PM 
VF6 1 4:03:48 PM 8/11/2016 4:03:48 PM 
VF6 1 4:52:23 PM 8/11/2016 4:52:23 PM 
VF6 1 11:06:31 PM 8/11/2016 11:06:31 PM 
VF6 1 12:23:23 AM 8/12/2016 12:23:23 AM 
VF6 1 1:23:26 AM 8/12/2016 1:23:26 AM 
VF6 1 2:43:20 AM 8/12/2016 2:43:20 AM 
VF6 1 3:40:12 AM 8/12/2016 3:40:12 AM 
VF6 1 4:40:09 AM 8/12/2016 4:40:09 AM 
VF6 1 5:38:44 AM 8/12/2016 5:38:44 AM 
VF6 1 6:52:05 AM 8/12/2016 6:52:05 AM 
VF6 1 8:00:43 AM 8/12/2016 8:00:43 AM 

以上是一些示例數據。 我想獲得記錄之間的經過時間。例如,我想知道從過去的時間:使用以上記錄的訪問中的已用時間

11:34:38 AM and 1:06:01 PM 

這是如果字段是相同的記錄相當簡單,但我使用上述信息來生成經過時間有困難。任何指導都將是一個很大的幫助。

謝謝!

回答

0

在其他DBMS系統中,通過LAGLEAD函數檢索上一行或下一行的值。 Access不支持這些功能,但你可以使用子查詢來完成同樣的事情。請參閱下面的示例SQL,其中我假設表的名稱是「TableName」。

你沒有提到你想要顯示經過時間的單位,或者每行應該與前一行還是下一行進行比較。所以在這裏,兩個比較都完成了,經過時間以秒顯示。

SELECT t.M 
    , t.[Qty TStamp] 
    , t.DStamp 
    , (SELECT TOP 1 t1.DStamp 
     FROM TableName t1 
     WHERE t1.DStamp < t.DStamp 
     ORDER BY t1.DStamp DESC 
     ) AS PreviousDStamp 
    , (SELECT TOP 1 t2.DStamp 
     FROM TableName t2 
     WHERE t2.DStamp > t.DStamp 
     ORDER BY t2.DStamp 
     ) AS NextDStamp 
     , DateDiff("s", PreviousDStamp, t.DStamp) AS Seconds_From_Previous 
     , DateDiff("s", t.DStamp, NextDStamp) AS Seconds_To_Next 
FROM TableName t 
ORDER BY t.DStamp 
; 

請注意,即使提及僅比較時間值你的問題,這實際上是SQL比較完整的日期/時間值(即DStamp列)。這樣,即使行之間的日期發生變化,您的數據也會準確無誤。

0

這並不難:

Select *, 
    (Select Max(T.DStamp) 
    From YourTable As T 
    Where T.DStamp < YourTable.DStamp) As LastDStamp 
From YourTable 

或周圍的其他方法:

Select *, 
    (Select Min(T.DStamp) 
    From YourTable As T 
    Where T.DStamp > YourTable.DStamp) As NextDStamp 
From YourTable 

如果您只需要timepart:

Select *, 
    (Select TimeValue(Max(T.DStamp)) 
    From YourTable As T 
    Where T.DStamp < YourTable.DStamp) As LastTStamp 
From YourTable