@bitwheeze

Как найти самую длинную последовательность значений?

В таблице три колонки: Пользователь, Событие, Время, где Событие два возможных значения к примеру "А" или "Б". Записи отсортированы по полю Время. Как найти самую длинную цепочку значения поля Событие?
Например, у Васи самая длинная цепочка, три события Б подряд. У Пети в серии данных тоже три Б, но между ними было событие А и потому самая длинная цепочка у него состоит из двух событий Б.
Вася	А
Петя	Б
Вася	Б
Женя	А       
Петя	Б
Вася	Б
Женя	А       
Петя	А
Петя	Б
Вася	Б

Результат: Вася, Б, 3
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Достаточно не тривиально:
with s as (
  select 
 	* ,
 	row_number() over (partition by name order by event_time asc) - 
 	row_number() over (partition by name, event order by event_time asc) gr
  from t
) select 
	name, event, count(*) 
  from s
  group by name, event, gr
  order by count desc
  limit 1;


PostgreSQL fiddle
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
да, возможно.
Смотри оконные функции, как раз для этой задачи
https://postgrespro.ru/docs/postgrespro/9.5/tutori...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы