add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
select version();
version()
8.0.36
create table t (day int, nickname text, result text);
insert into t values
(1,'john','lose'),
(3,'mark','draw'),
(2,'mark','win'),
(1,'mark','win'),
#(5,'richard','win'),
(4,'richard','win'),
(3,'richard','draw'),
(2,'richard','win'),
(1,'richard','win');
Records: 8  Duplicates: 0  Warnings: 0
select
nickname,
result,
count(1) over (partition by nickname order by day) -
count(1) over (partition by nickname, result order by day) streak_id
from t
nickname result streak_id
john lose 0
mark draw 2
mark win 0
mark win 0
richard draw 2
richard win 0
richard win 0
richard win 1
select nickname, result, count(*) as streak
from (
select
nickname,
result,
count(1) over (partition by nickname order by day) -
count(1) over (partition by nickname, result order by day) streak_id
from t
) results_with_streak_id
group by nickname, result, streak_id
nickname result streak
john lose 1
mark draw 1
mark win 2
richard draw 1
richard win 2
richard win 1