我有下面的表格,其中有amount
分可以收费或记入贷方.这些条目中的每一行都得到id
分.现在,您可以通过给予完全相同的金额的信用并逆转该/来取消费用.如果是这样的话,reversed_by
字段会告诉你哪一个id
会翻转它.但你可以想反转多少次就逆转多少次.因此,例如,id 8fa22925
从未被颠倒,并且应该单独在一个组中(4
).4e35510a
被c362b6c5
逆转,逆转停止,所以他们进入了3
组.beca097b
被dc102220
颠倒,但这反过来又被84529ee0
颠倒.我知道id
和reversed_by
以2列格式形成了一个简单的树 struct .
如何使用postgres将分组添加到所有连接,如下面所需的输出所示?
我不关心group
是什么…可以是int、varchar、原始/最后的ID等.
图式
CREATE TABLE delete_me (
amount Int,
id varchar(255),
reversed_by varchar(255)
);
INSERT INTO delete_me
VALUES
( 12,'ea75921c', NULL ),
(-12,'e72d92d9','ea75921c'),
(-12,'84529ee0', NULL ),
( 12,'dc102220','84529ee0'),
(-12,'beca097b','dc102220'),
( 8,'c362b6c5', NULL ),
( -8,'4e35510a','c362b6c5'),
( 10,'8fa22925', NULL )
Query #1个
SELECT * FROM delete_me;
amount | id | reversed_by |
---|---|---|
12 | ea75921c | |
-12 | e72d92d9 | ea75921c |
-12 | 84529ee0 | |
12 | dc102220 | 84529ee0 |
-12 | beca097b | dc102220 |
8 | c362b6c5 | |
-8 | 4e35510a | c362b6c5 |
10 | 8fa22925 |
Desired Output个
amount | id | reversed_by | group |
---|---|---|---|
12 | ea75921c | 1 | |
-12 | e72d92d9 | ea75921c | 1 |
-12 | 84529ee0 | 2 | |
12 | dc102220 | 84529ee0 | 2 |
-12 | beca097b | dc102220 | 2 |
8 | c362b6c5 | 3 | |
-8 | 4e35510a | c362b6c5 | 3 |
10 | 8fa22925 | 4 |