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 :(得分:0)
在其他DBMS系统中,从前一行或下一行检索值是通过_1
或LAG
函数完成的。 Access不支持这些功能,但您可以使用子查询完成相同的操作。请参阅下面的示例SQL,其中我假设您的表名是“TableName”。
您没有提及要显示已用时间的单位,或者是否应将每一行与上一行或下一行进行比较。所以在这里,两个比较都完成了,并且经过的时间以秒为单位显示。
LEAD
请注意,即使您的问题提到仅比较时间值,此SQL实际上会比较完整的日期/时间值(即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
;
列)。这样,即使日期在行之间发生变化,您的数据也会准确无误。
答案 1 :(得分: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
如果您只需要时间部分:
Select *,
(Select TimeValue(Max(T.DStamp))
From YourTable As T
Where T.DStamp < YourTable.DStamp) As LastTStamp
From YourTable