根据上一行或下一行计算总和

时间:2016-03-15 18:00:59

标签: oracle

我正在处理oracle中的一些数据,而且我需要做的计算数据略显不完整。 该表看起来像这样(客户不是唯一的):

customer | status_From | status_To | date_Of_Change

我要做的是获取这些数据:

Customer (grouped by) | status | days in status (sum for customer as status) 

其中status将是从下一行的日期中减去一行的日期。相同的状态可能重复出现,有时是顺序出现,有时不出现。如果没有其他行,我想使用当前日期进行数学运算。

基本上,它是

select customer,
SUM(CASE WHEN status_From LIKE 'A%' THEN (?Date of next row?) - date_of_change ELSE 0 END) AS DaysAsA,
from Log
GROUP BY customer

有没有办法可以在oracle中执行此操作而无需进行多次查询(在coldfusion中)并循环遍历它们?

1 个答案:

答案 0 :(得分:2)

使用lead()分析函数来检索下一行的值:

select
  ..
  ,lead(t.status, 1, 0) over(order by t.status) nextStatus
from
  table1 t