SQL запрос по группировке сессий пользователя

Помогите сделать SQL запрос по заданным условиям:

Таблица содержит информацию о пользовательских сессиях. Написать запрос, который вернет максимальное число одновременных подключений для каждого пользователя и минимальное время, когда это произошло.

t.username – логин пользователя ; t.logon_time – время старта сессии logoff_time – время закрытия сессии


Ответы (1 шт):

Автор решения: Akina
WITH 
cte1 AS ( SELECT username, logon_time event_time, 1 weight FROM source_table
          UNION ALL
          SELECT username, logoff_time, -1 FROM source_table ),
cte2 AS ( SELECT username, 
                 event_time, 
                 SUM(weight) OVER (PARTITION BY username ORDER BY event_time, weight) amount
          FROM cte1 ),
cte3 AS ( SELECT username, 
                 event_time, 
                 amount,
                 ROW_NUMBER() OVER (PARTITION BY username ORDER BY amount DESC, event_time ASC) rn 
          FROM cte2 )
SELECT username, event_time, amount
FROM cte3
WHERE rn = 1;

fiddle

→ Ссылка