Sql 计算组中每个记录之间的时间差(以分钟为单位)
我有以下表格:Sql 计算组中每个记录之间的时间差(以分钟为单位),sql,sql-server,Sql,Sql Server,我有以下表格: Event Startdatetime Enddatetime Value 1 '23/09/2016 12:15:20' '23/09/2016 12:34:30' 50 1 '23/09/2016 14:10:40' '23/09/2016 14:30:25' 40 2 '25/10/2016 10:20:45' '25/10/2016 10:45:55' 80 2 '25
Event Startdatetime Enddatetime Value
1 '23/09/2016 12:15:20' '23/09/2016 12:34:30' 50
1 '23/09/2016 14:10:40' '23/09/2016 14:30:25' 40
2 '25/10/2016 10:20:45' '25/10/2016 10:45:55' 80
2 '25/10/2016 11:27:35' '25/10/2016 11:48:55' 30
每个记录都有startdatetime和enddatetime,我想计算组中每个记录之间的时间差(按事件计算)。由于这不是SQL Server认可的日期格式,您需要先转换它,然后再进行计算。您可以使用
LAG
获取SQL 2012以后的上一条记录
select datediff(mi,convert(datetime,Startdatetime,103),convert(datetime,lag(Enddatetime) over (order by Startdatetime),103))
或者如果它不需要转换
select datediff(mi,Startdatetime,lag(Enddatetime) over (order by Startdatetime))
如果您只希望对事件进行时间计算,那么您也可以将其分割开来
select datediff(mi,Startdatetime,lag(Enddatetime) over (partition by Event order by Startdatetime))
这些值实际上是
DATETIME
值吗?它们看起来像VARCHAR
。有什么原因不能使用DATEDIFF()
?在这个问题上,你称之为“团体”是什么?示例数据的预期结果是什么?DATEDIFF(分钟、开始日期时间、结束日期时间)
可以。或者DATEDIFF(SECOND,Startdatetime,Enddatetime)/60
在实际案例中是它的日期格式列,所以我对日期格式没有问题。@Tony如果是datetime,它看起来不像你发布的,所以你必须改变它,但是如果你愿意,你可以删除转换并使用lag。这只是实际案例中的日期格式的一个例子,现在我只需要我前面提到的:需要在下面记录的startdatetime和上一记录的enddatetime之间的datediff。@Tony。。。我发布的内容将起作用。我发布了相同的解决方案,没有进行转换。非常感谢您的帮助。Simon,我现在没有sql server要测试,明天将进行测试并通知您。实际上,在实际情况下,我需要捕获datediff小于15分钟的记录,假设接下来的几条记录的datediff小于15分钟,所以我捕获min startdatetime和max enddatetime,如果下一条记录的datediff大于15分钟,则此记录保持不变。