sql查询计算不同列和相邻行的两个日期之间的差异
Posted
技术标签:
【中文标题】sql查询计算不同列和相邻行的两个日期之间的差异【英文标题】:sql query to calculate the difference between two dates of different columns and adjacent rows 【发布时间】:2016-06-03 08:20:53 【问题描述】:下面是我的桌子。
我想通过计算两个日期之间的差异来填充中断列
我想计算列 EndD、EndT 和 StartD、StartD 之间但不同行(第 2 行)的时间。 例如- EndD 为“2016-06-01 18:17:48”,开始日期为“2016-06-01 18:46:05”,休息时间应在这两个日期之间计算
输出应该是这样的:
【问题讨论】:
您使用的是哪个 DBMS? 并请显示表结构(或至少 startD 和 StartT 数据类型) sql server 2008 and table structure if you ask..m using nvarchar(50) for StartD, StartT, EndD,EndT and for Break Time(0) 【参考方案1】:试试这个:
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
函数中切换两个日期参数来解决。我已经更新了代码(上面)以反映这一点。
【讨论】:
谢谢达斯汀。:) 但我得到的 Breakvalues 为负数。 您应该能够在 DATEDIFF 函数中切换两个日期参数来解决这个问题(并获得正值)。我刚刚编辑了我的答案以显示这一点 是的......即使我也在尝试做这样的事情......非常感谢达斯汀:)【参考方案2】:对于可以工作的 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
【讨论】:
我使用的是 sql server 2008 我可以用 cte 这个吗 那么使用上述查询有什么问题【参考方案3】:SELECT
DATEDIFF(minute,'2016-06-01 20:17:48','2016-06-01 20:50:17')
提到你应该按照你想要的顺序改变它,并且总是增加 startT + 1
【讨论】:
我的朋友没有硬编码。函数 Datediff 准确地返回你想要的,这就是她的工作。因此,如果您将其作为第一个参数 startT(下一个)和第二个参数 EndT,那么它将完美地工作以上是关于sql查询计算不同列和相邻行的两个日期之间的差异的主要内容,如果未能解决你的问题,请参考以下文章