2014-07-20 76 views
1

我想給序列編號來複制recods和caluculate的時間滯後,不能做到這一點序列重複表重新編號

例子:

id time 

A 12h30 
A 13h45 
A 19h48 
B 8h00 
B 10h12 
C 22h50 
D 9h02 
D 16h46 

預期的查詢結果

id time sequence lag 

A 12h30  1 0h00 
A 13h45  2 1h15  
A 19h48  3 6h02 
B 8h00  1 0h00 
B 10h12  2 2h12 
C 22h50  1 0h00 
D 9h02  1 0h00 
D 16h46  2 6h44 

我所能做的就是用這個查詢重新編號連續的序列

SELECT count(*)as rank, a1.id 


FROM table a1, table a2 

where a1.id >=a2.id 

group by a1 
order by rank, a1.id 

任何想到做到這一點的最佳做法?

非常感謝

回答

2

可以使用row_number()的順序和lag()計算上一行之間的時間差

select 
    id, 
    time, 
    row_number() over(partition by id order by time) sequence, 
    (case when (lag(id) over (order by id, time)) = id 
     then time - (lag(time) over (order by id, time)) 
     else 0 
    end) diff 
from mytable t1 
order by id, time 

您可能需要修改根據什麼類型的time case語句列有。

+0

正是!是的時間列是一個時間戳提取小時+分鐘/ 60它似乎有伎倆,謝謝 – Eddinho