我有一个CTE,返回的内容类似于您在下面看到的内容:
Date | ID | Category
--------------------
1/1/18 | 1 | Delivery
1/2/18 | 2 | Return
1/4/18 | 3 | Delivery
1/5/18 | 4 | Middle
1/6/18 | 5 | Return
1/7/18 | 6 | Delivery
我希望添加一个唯一且递增的ID,该ID以category ='Delivery'开始,并在category ='Return'之后结束/重置。
例如...
Date | ID | Category | New ID
-------------------------------
1/1/18 | 1 | Delivery | 1
1/2/18 | 2 | Return | 1
1/4/18 | 3 | Delivery | 2
1/5/18 | 4 | Middle | 2
1/6/18 | 5 | Return | 2
1/7/18 | 6 | Delivery | 3
...
我的大部分经验是使用MySQL,因此我可以使用存储过程轻松地做到这一点,但是很难用postgres来解决它。
注意,这都是CTE定义的,并在查询中保存-我没有要更新的实际基础表
答案 0 :(得分:2)
使用渐进式sum()
计算Delivery
类别的实例数:
with my_data(date, id, category) as (
values
('1/1/18', 1, 'Delivery'),
('1/2/18', 2, 'Return'),
('1/4/18', 3, 'Delivery'),
('1/5/18', 4, 'Middle'),
('1/6/18', 5, 'Return'),
('1/7/18', 6, 'Delivery')
)
select *, sum((category = 'Delivery')::int) over (order by id) as new_id
from my_data
date | id | category | new_id
--------+----+----------+--------
1/1/18 | 1 | Delivery | 1
1/2/18 | 2 | Return | 1
1/4/18 | 3 | Delivery | 2
1/5/18 | 4 | Middle | 2
1/6/18 | 5 | Return | 2
1/7/18 | 6 | Delivery | 3
(6 rows)