按列中的值对数据进行排序



我想根据列中的值将数据分成不同的组(块)。如果该值增加到某个阈值以上,则"组"中的值;应增加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>11112111322141115352611271128112966310113

一个累积的总和应该做你想做的:

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

相关内容

  • 没有找到相关文章

最新更新