2016-09-14 17 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

像魅力一樣工作!非常感謝 :) –