sql查询来计算不同列和相邻行的两个日期之间的差异

时间:2016-06-03 08:20:53

标签: sql sql-server

以下是我的表格。

enter image description here

我想通过计算两个日期之间的差异来填充break列

我想计算EndD,EndT和StartD,StartD列之间但不同行(第2行)之间的时间。 例如 - EndD是'2016-06-01 18:17:48',开始日期是'2016-06-01 18:46:05',应该在这两个日期之间计算休息时间

输出应该是这样的:

enter image description here

3 个答案:

答案 0 :(得分:2)

试试这个:

SELECT  ID, AgentID, StartD, StartT, EndD, EndT,
      DATEDIFF(minute, 
         CAST(t1.EndD + ' ' + t1.EndT AS DATETIME),
         (SELECT CAST(t2.StartD + ' ' + t2.StartT AS DATETIME)
            FROM yourTable t2 
            WHERE t2.ID = t1.ID + 1  AND t1.AgentID = t2.AgentID)) as [break] 
FROM  yourTable t1

Datediff函数占用嵌入式查询(使用相同代理的下一行的日期和时间)与当前行的日期和时间之间的分钟数。此外,请确保在列名称“break”周围使用括号,因为它是SQL-Server保留字。

<强>更新

用户从我的回答中报告了负值。这应该通过切换DATEDIFF函数中的两个日期参数来解决。我已经更新了代码(上面)以反映这一点。

答案 1 :(得分:0)

对于可行的tsql

update a 
set a.break=datediff(minute,a.endt,b.startt)
from tbl a
inner join tbl b 
on a.startD=b.endD and a.ID=b.ID-1 

答案 2 :(得分:0)

SELECT 
DATEDIFF(minute,'2016-06-01 20:17:48','2016-06-01 20:50:17')

提及您应该按照自己的意愿更改它,并始终增加startT + 1