2016-09-14 19 views
0

我想构建一个SQL查询,在时间戳表中的两个后续行上执行DateDiff。查询显示时间戳之间有多少毫秒。我最初的解决方案使用游标来获取行。然而,这是缓慢的,特别是因为我正在处理超过170K的行。以下是查询:如何加快使用游标的查询?

declare cur cursor for 
select timestamp from TimeStamps 
declare @firststamp datetime2 
declare @secondstamp datetime2 
fetch next from cur into @firststamp 
while (@@FETCH_STATUS = 0) 
begin 
    fetch next from cur into @secondstamp 
    print(DateDiff(millisecond, @firststamp, @secondstamp)) 
    set @firststamp = @secondstamp 
end 
close cur 
deallocate cur 

有没有办法可以加快速度? 另外,是否有一个替代的查询,我可以写以获得所需的结果?

+0

您已经标记了问题“mysql”,但您使用的是SQL Server语法。请正确标记。 –

+0

您在该表中定义了自动增量字段吗? – Shadow

+0

@Shadow,是的,表格有一个自动增量字段。你会如何接近它?我很想知道你的解决方案将如何与戈登不同 –

回答

3

在SQL Server 2012+,您使用lag()可以这样做:

select t.*, 
     datediff(millisecond, lag(timestamp) over (order by timestamp), 
       timestamp) as diff_ms 
from t; 

基于查询的问题的语法,我忽略了数据库的标签。

+0

像魅力一样工作!非常感谢 :) –