SQLFiddle's SqlLite option is being buggy, so this is in Postgres. Should be all the same except you'll have to play with the date add in SqlLite to find the equivalent of DATE - INTEGER_IN_DAYS in postgres, in the start_of_streak derivation.
SQLite equivalent of SQL Server DateAdd function
credit to https://blog.jooq.org/how-to-find-the-longest-consecutive-series-of-events-in-sql/
for the reference
CREATE TABLE some_table
(
user_id INT,
created_at TIMESTAMP
);
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-12 01:14:41.034482');
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-09 01:14:41.034482');
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-09 01:14:25.576612');
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-08 19:29:29.035590');
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-07 18:56:58.093392');
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-07 18:50:52.096982');
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-07 16:09:23.021376');
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-06 15:51:08.487921');
INSERT INTO some_table (user_id, created_at) VALUES ('123', '2023-06-06 15:48:57.417946');
INSERT INTO some_table (user_id, created_at) VALUES ('555', '2023-06-03 15:43:57.417946');
INSERT INTO some_table (user_id, created_at) VALUES ('555', '2023-06-02 15:28:57.417946');
INSERT INTO some_table (user_id, created_at) VALUES ('555', '2023-06-01 15:18:57.417946');
with user_date_combos as (
select distinct
user_id,
date(created_at) as created_date
from some_table
),
consecutive_grouping AS (
SELECT
user_id,
created_date,
created_date - cast(ROW_NUMBER() OVER (
partition by user_id
ORDER BY created_date) as int) + 1 as start_of_streak
FROM user_date_combos
)
select user_id,
max(length_of_streak) as longest_streak
from (
select user_id,
start_of_streak,
count(1) as length_of_streak
from consecutive_grouping
group
by user_id,
start_of_streak) as tmp
group
by user_id
user_id |
longest_streak |
123 |
4 |
555 |
3 |
Fiddle:
http://sqlfiddle.com/#!17/c068c8/7