2015-06-16 30 views
0

这里之间时间戳差值是我与在MS Access从系统跟踪处理的数据时,代理使得系统的变化: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; 
+0

您的样本数据的预期输出是什么? – Gustav

+0

我期望沿着这样的方向行事:agentid,eventype1,reasoncode1,eventdatetimelocal1,eventdatetimelocal2,eventtype2,reasoncode2,秒。通过这种方式,我可以获得冲头,冲出,事件和原因代码以及持续时间。 – rynsmns

回答

0

我从查询接收到错误下面沿着“这一行,说明什么查询只能返回最多一行“。但是查询和这个参考文献:Calculating time difference between activity timestamps in a query给了我我需要的东西,下面列出来供参考。我决定我的最初需求太宽泛了,所以我简化了查询以返回将时间戳带到上一行所需的最小数据。我可以用另一个查询来计算秒数。这需要一段时间才能处理,但它的工作原理可以在需要时运行一夜。

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; 
0

你可以试试这个查询

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;