2014-07-20 73 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