Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算两个时间记录之间的差异_Sql_Database_Ms Access - Fatal编程技术网

Sql 计算两个时间记录之间的差异

Sql 计算两个时间记录之间的差异,sql,database,ms-access,Sql,Database,Ms Access,我发现许多问题与我的问题相似,但并不完全相同,我在这些问题中没有发现任何帮助,所以这里是一个新的问题 预期输出:如果用户相同,则一个时间记录与上一个时间记录之间的差异 样本表: +-------+--------+-------------------+------+ | RowID | User | Godzina_transakcji| Diff | +-------+--------+-------------------+------+ | 1 | AAA

我发现许多问题与我的问题相似,但并不完全相同,我在这些问题中没有发现任何帮助,所以这里是一个新的问题

预期输出:如果用户相同,则一个时间记录与上一个时间记录之间的差异

样本表:

+-------+--------+-------------------+------+   
| RowID | User   | Godzina_transakcji| Diff |   
+-------+--------+-------------------+------+   
|    1  | AAA    | 14:23:03          |      |   
|    2  | AAA    | 14:23:57          |      |   
|    3  | AAA    | 14:25:03          |      |   
|    4  | BBB    | 03:37:23          |      |   
|    5  | BBB    | 03:39:21          |      |   
|    6  | BBB    | 05:23:11          |      |   
+-------+---------+------------------+------+ 
因此,对于第1行的查询应该给出0,对于第2行的查询应该给出=14:23:57-14:23:03,依此类推

到目前为止,我根据@Tom Collins在另一个问题中的回答得出了类似的结论,但出于某种原因,它给出了[错误]


您可以结合使用DMax和DLookUp,但在大型数据集上可能会遇到性能问题:

SELECT RowID, User, Godzina_transakcji,
Nz(DMax("RowId","tblTemp2","User='" & [User] & "' and RowId<" & [RowId]),0) AS Prev_RowID,
DLookUp("Godzina_transakcji","tblTemp2","User='" & [User] & "' AND RowId=" & [Prev_RowId]) AS Prev_Godzina_transakcji, 
DateDiff("s",[Prev_Godzina_transakcji],[Godzina_transakcji]) AS Diff_in_sec
FROM tblTemp2;
DLookUp根据用户和以前的RowId获取以前的时间:

然后使用DateDiff计算差异:


这将为您提供以秒为单位的时间差。

这是因为您将时间存储为文本。您必须转换为真实时间才能直接比较:

选择tblTemp2.RowID, tblTemp2.用户, tblTemp2.Godzina_transakcji, NzDmaxGodzina_transakcji,tblTemp2,时间值[Godzina_transakcji]<&[Godzina_transakcji]和用户='&[User]&',00:00-时间值[Godzina_transakcji]作为差异 来自tblTemp2; 要使用ID,请执行以下操作:

选择 tblTemp2.RowID, tblTemp2.用户, tblTemp2.Godzina_transakcji, 选择TimeValueT.Godzina_transakcji 从tblTemp2作为T 其中T.RowID=tblTemp2.RowID+1和T.User=tblTemp2.User-TimeValue[Godzina_transakji]作为差异 从…起 tblTemp2;
Godzina_transakcji的数据类型是什么?请参阅表定义。在所有表中都显示日期/时间,但可能是因为它从txt文件导入时未正确导入。嗯,现在错误已更改。现在是microsoft数据库引擎找不到输入表或查询用户。这是您的表,所以我猜您没有表用户。为什么不使用您正在测试的表呢?。请看编辑后的答案。哦,对不起,一定是太晚了,看不到。。。我已将格式…,hh:nn:ss添加到整个差分计算中,以获得与Godzina_transakcji相同格式的结果。但我想知道,如果用户在记录之间进行更改,是否有方法返回0或null?在WHERE and now中进行了小的修改-切换参数,它完全可以执行它应该执行的操作。谢谢,你是上帝!感谢您的回答,它是零长度字符串,因为您指出的目标是创建能够处理比Excel更大的数据范围的工具,所以任何性能低下的东西我都必须在一开始就放弃。测试它,看看它是如何为您工作的。
SELECT 
    tblTemp2.RowID,
    tblTemp2.User,
    tblTemp2.Godzina_transakcji,
    Format((    Select TimeValue(T.Godzina_transakcji) 
                From tblTemp2 As T
    Where tblTemp2.RowID = T.RowID + 1  And tblTemp2.User = T.User ) - TimeValue([Godzina_transakcji]), "hh:nn:ss") As Diff
FROM
   tblTemp2;
SELECT RowID, User, Godzina_transakcji,
Nz(DMax("RowId","tblTemp2","User='" & [User] & "' and RowId<" & [RowId]),0) AS Prev_RowID,
DLookUp("Godzina_transakcji","tblTemp2","User='" & [User] & "' AND RowId=" & [Prev_RowId]) AS Prev_Godzina_transakcji, 
DateDiff("s",[Prev_Godzina_transakcji],[Godzina_transakcji]) AS Diff_in_sec
FROM tblTemp2;
Nz(DMax("RowId","tblTemp2","User='" & [User] & "' and RowId<" & [RowId]),0) AS Prev_RowID
DLookUp("Godzina_transakcji","tblTemp2","User='" & [User] & "' AND RowId=" & [Prev_RowId]) AS Prev_Godzina_transakcji
DateDiff("s",[Prev_Godzina_transakcji],[Godzina_transakcji]) AS Diff_in_sec