2017-08-08 63 views
1

创建自定义编号我有一个包含这些列的表:Postgres里

track track_id 
----------------- 
1  1 
1  1 
0  2 
1  2 
1  2 
0  3 
1  3 
1  3 
0  4 
0  5 
.... 

我列track并要计算track_id,具体做法是: 由1开始,每次track为0, track_id应该增加1(0指定新轨道的开始)。

我希望我可以设置一个变量,然后在每次条件为真时增加它,但似乎没有一个简单的方法来做到这一点。

我将不胜感激一个查询,可以拉这个。谢谢。

回答

1

首先,您需要一个指定排序的列。 SQL表格代表无序集合。让我假设你有这样一个专栏,我只需要拨打id

然后,您可以使用累计总和:

select t.*, 1 + sum((track = 0)::int) over (order by id) as track_id 
from t; 

如果track只需要在值0和1,您可以简化这甚至更多:

select t.*, 1 + sum(1 - track) over (order by id) as track_id 
from t; 
+0

谢谢简化版本工作得很好。 – simpsonment1