为Postgresql创建过程或查询,每次都依赖于前一个过程或查询

时间:2017-02-02 13:18:35

标签: sql postgresql

我在Postgresql中有一个表:

   item_id, item_timestamp, item_duration, item_some_condition

我想计算一个时期列表并确定哪一个" now()"碰巧是?计算过程如下:

  a) if previous_item.item_some_condition is true:
    item_timestamp + item_duration 

  or

  b) if previous_item.item_some_condition is false:
    item_timestamp + item_duration + 10 

如您所见,每个项目都取决于前一个项目。我想要一个关于如何做到这一点的高级建议:

- 它是否必须是一个函数/过程而不仅仅是一个查询?

- 因为"确定哪一个" now()",我认为必须是

如果是这样,我应该首先查询表中的所有数据并将其存储在变量中吗?然后迭代它?

1 个答案:

答案 0 :(得分:1)

使用lag()

select t.*
from (select t.*,
             lag(item_some_condition) over (partition by item_id order by item_timestamp) as prev_item_some_condition
      from t
     ) t
where now() >= item_timestamp and
      ( (now() < item_timestamp and prev_item_some_condition) or
        (now() < item_timestamp and prev_item_some_condition + interval '10 day')
      )