pl sql-估计时间戳之间的持续时间

时间:2011-06-19 19:41:41

标签: plsql

我有下表:

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个中间事件。

1 个答案:

答案 0 :(得分:1)

SELECT id,
       start,
       end, 
       start - lag(end) over (partition by id order by start)
FROM your_table

这假设术语“第一个”和“前一个”由start列上的订单定义。如果定义不同,则必须在我的示例中调整order by start部分。