Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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_Sql Server - Fatal编程技术网

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分钟,则此记录保持不变。