以下是我的表格。
我想通过计算两个日期之间的差异来填充break列
我想计算EndD,EndT和StartD,StartD列之间但不同行(第2行)之间的时间。 例如 - EndD是'2016-06-01 18:17:48',开始日期是'2016-06-01 18:46:05',应该在这两个日期之间计算休息时间
输出应该是这样的:
答案 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