我需要在查询中显示每行的连续赢/输,所以给定下表,查询应该返回“预期”列。我尝试了一些使用窗口函数的方法,但没有成功。
create table matches (player text, dt date, is_winner boolean, expected integer )
insert into matches values
('A', '2019-01-01', TRUE, 0),
('A', '2019-01-03', TRUE, 1),
('A', '2019-01-04', TRUE, 2),
('A', '2019-01-09', FALSE, 0),
('A', '2019-01-10', FALSE, -1),
('A', '2019-01-15', TRUE, 0);
player dt is_winner expected
A 2019-01-01 true 0
A 2019-01-03 true 1
A 2019-01-04 true 2
A 2019-01-09 false 0
A 2019-01-10 false -1
A 2019-01-15 true 0
逻辑是:
- 输后赢或赢后输时重置为 0。
- 获胜后增加,但如果是案例 1,则不会增加。
- 亏损后递减,但如果是第一种情况则不会。
欢迎任何有关如何解决此问题的见解。我最后的手段是每行都调用一个循环的函数。