簡體   English   中英

訪問:計算行之間的時間戳差異

[英]ACCESS: calculate timestamp difference between rows

這是我在MS Access中通過代理跟蹤進行系統更改時從系統跟蹤的數據:

|agentid|eventtype|reasoncode|eventdatetimelocal   |
|1830   |2        |32762     |01/01/2014 7:11:44 PM|
|1830   |3        |0         |01/01/2014 7:13:46 PM|
|1830   |2        |32762     |01/01/2014 7:14:55 PM|
|1833   |2        |0         |01/01/2014 7:11:35 PM|
|1833   |3        |32762     |01/01/2014 7:13:25 PM| 

我需要確定代理之間行之間經過的秒數。 我還想保留事件類型和原因碼的詳細信息。

我嘗試加入subqry,但無法正常工作:

SELECT sub1.agentid, 
       sub1.eventtype, 
       sub1.reasoncode,
       sub1.eventdatetimelocal, 
       (sub1.next_timestamp-sub1.eventdatetimelocal) AS duration
FROM (SELECT i.agentid, 
      eventdatetimelocal, 
      eventtype, 
      reasoncode, (SELECT
                        Min([eventdatetimelocal]) 
                   FROM state_detail_tbl 
                   WHERE [eventdatetimelocal] > i.eventdatetimelocal
                   ) AS next_timestamp 
     FROM state_detail_tbl AS i 
     WHERE i.eventdatetimelocal BETWEEN #01/01/2014# AND #01/31/2014#
)  AS sub1;

您可以嘗試此查詢

SELECT sub1.agentid, 
       sub1.eventtype, 
       sub1.reasoncode,
       sub1.eventdatetimelocal, 
       (SELECT TOP 1 sub2.eventdatetimelocal - sub1.eventdatetimelocal 
        FROM state_detail_tbl AS sub2 
        WHERE sub1.agentid=sub2.agentid
              AND sub2.eventdatetimelocal > sub1.eventdatetimelocal 
        ORDER BY sub2.eventdatetimelocal) AS duration

FROM state_detail_tbl sub1
WHERE (SELECT TOP 1 eventdatetimelocal 
       FROM state_detail_tbl AS s3 
       WHERE sub1.agentid=s3.agentid 
             AND s3.eventdatetimelocal > sub1.eventdatetimelocal) Is Not Null
AND sub1.eventdatetimelocal BETWEEN #01/01/2014# AND #01/31/2014#
ORDER BY sub1.agentid, sub1.eventdatetimelocal;

我從下面的查詢中收到一個錯誤,指出“該查詢最多只能返回一行”。 但是查詢以及此參考文獻: 計算查詢中活動時間戳記之間的時間差為我提供了我需要的內容,下面列出以供參考。 我認為最初的需求太廣泛了,因此我簡化了查詢,以返回將時間戳記帶到上一行所需的最少數據。 我可以使用datediff進入另一個查詢以找出秒數。 處理需要一段時間,但它可以正常運行,並且可以根據需要在一夜之間運行。

SELECT i.agentid, i.eventtype, i.reasoncode, eventdatetimelocal, (SELECT
Min([eventdatetimelocal]) FROM state_detail_subqry WHERE agentid = i.agentid
AND [eventdatetimelocal]>i.[eventdatetimelocal]) AS next_timestamp
FROM state_detail_subqry AS i
ORDER BY agentid, eventdatetimelocal;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM