我有一个包含这些列的表:
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指定新曲目的开头)。
我希望我可以设置一个变量,然后在每次条件为真时递增它,但似乎没有一种简单的方法可以做到这一点。
我很感激可以提出这个问题的查询。谢谢。
答案 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;