我有下表:
ID | START | END
A | 11/2/2011 10:00 | 13/2/11 10:00
A | 15/2/2011 10:00 | 16/2/11 10:00
A | 18/2/2011 10:00 | 20/2/11 10:00
B | 11/2/2011 10:00 | 13/2/11 10:00
C | 14/2/2011 10:00 | 17/2/11 10:00
D | 19/2/2011 10:00 | 21/2/11 10:00
D | 25/2/2011 10:00 | 28/2/11 10:00
我想估计,对于重复的ID(即A,D),第一个END和下一个开始,第二个END和第三个START之间的持续时间依次为相同的ID。例如,对于A,期望的结果是:
START2: 15/2/2011 10:00 - END1: 13/2/11 10:00 = 2 days
START3: 18/2/2011 10:00 - END2: 16/2/11 10:00 = 2 days.
此外,对于重复的ID,我想要第一个事件的计数(在我的例子中等于2,一个用于A,一个用于D),中间重复事件的数量(在我的例子中等于1,仅对于A)和最后的计数。如果我有一个10次出场的身份证,我将有1个第一,1个最后和8个中间事件。
答案 0 :(得分:1)
SELECT id,
start,
end,
start - lag(end) over (partition by id order by start)
FROM your_table
这假设术语“第一个”和“前一个”由start
列上的订单定义。如果定义不同,则必须在我的示例中调整order by start
部分。