我在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()",我认为必须是
如果是这样,我应该首先查询表中的所有数据并将其存储在变量中吗?然后迭代它?
答案 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')
)