如何获得零钱?
How to get the change number?
source
值改变时如何增加值?
我试过 rank
, dense_rank
, row_number
都没有成功 =(
id | src | how to get this?
--------
1 | 1 | 1
2 | 1 | 1
3 | 7 | 2
4 | 1 | 3
5 | 3 | 4
6 | 3 | 4
7 | 1 | 5
注意:src
保证按照您看到的顺序
有没有简单的方法可以做到这一点?
您可以通过嵌套两个 window 函数来实现此目的 - 第一个获取 src
值是否从上一行更改,第二个计算更改的次数。不幸的是,Postgres 不允许直接嵌套 window 函数,但是 you can work around that 带有子查询:
SELECT
id,
src,
sum(incr) OVER (ORDER BY id)
FROM (
SELECT
*,
(lag(src) OVER (ORDER BY id) IS DISTINCT FROM src)::int AS incr
FROM example
) AS _;
source
值改变时如何增加值?
我试过 rank
, dense_rank
, row_number
都没有成功 =(
id | src | how to get this?
--------
1 | 1 | 1
2 | 1 | 1
3 | 7 | 2
4 | 1 | 3
5 | 3 | 4
6 | 3 | 4
7 | 1 | 5
注意:src
保证按照您看到的顺序
有没有简单的方法可以做到这一点?
您可以通过嵌套两个 window 函数来实现此目的 - 第一个获取 src
值是否从上一行更改,第二个计算更改的次数。不幸的是,Postgres 不允许直接嵌套 window 函数,但是 you can work around that 带有子查询:
SELECT
id,
src,
sum(incr) OVER (ORDER BY id)
FROM (
SELECT
*,
(lag(src) OVER (ORDER BY id) IS DISTINCT FROM src)::int AS incr
FROM example
) AS _;