我想根据列中的值将数据分成不同的组(块)。如果该值增加到某个阈值以上,则"组"中的值;应增加1.
这在MySQL中很容易实现,通过做CASE WHEN @val > 30 THEN @row_no + 1 ELSE @row_no END
,但是我使用的是Amazon Redshift,这是不允许的。
示例小提琴:http://sqlfiddle.com/#!15/00b3aa/6
显示输出:
<表类>
ID
价值
组
tbody><<tr>1 11 1 211 1 3 22 1 411 1 535 2 611 2 711 2 811 2 9 66 3 1011 3 表类>
一个累积的总和应该做你想做的:
SELECT *, sum((val>=30)::INTEGER) OVER (ORDER BY id BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM mydata ORDER BY id;
id | val | sum
----+-----+-----
1 | 11 | 0
2 | 11 | 0
3 | 22 | 0
4 | 11 | 0
5 | 35 | 1
6 | 11 | 1
7 | 11 | 1
8 | 11 | 1
9 | 66 | 2
10 | 11 | 2