2016-01-13 24 views
0

当记录被挂起并多次激活时,如何计算日志的日期。我想在每次暂停时都分配一个连续号码吗?还是有更好的方法来做到这一点?计算记录的多个暂停状态

例如

If count(suspendeddate)++ >1 set sequentialnumber to 1, 2, 3 

DATA:

id logdate status 
1 1/1/2015 suspended 
1 1/2/2015 active 
1 1/3/2015 active 
1 1/5/2015 active 
1 1/5/2015 suspended 
2 1/2/2015 suspended 
2 1/6/2015 active 
2 1/7/2015 active 

结果

id suspendeddays1 suspendeddays2 
1 1    369 
2 4    0 

回答

0

要计算悬浮天,使用lead()

select d.*, 
     datediff(day, logdate, next_logdate) daysOfSuspend 
from (select d.*, 
      lead(logdate) over (partition by id order b logdate) as next_logdate 
     from data d 
    ) t 
where status = 'suspended'; 

这会将每个暂停放在单独的行上,而不是放在单独的列中。

+0

如果有多个状态更改,可以说某种原因,记录连续2或3次更改状态变为活动状态?编辑示例。 – EPV

+0

由于这是兼容性问题,无法使用铅。 – EPV

+0

@EPV。 。 。每个“暂停”状态在下一个记录结束。此代码仍然有效。 –