TGViewer
SQL и Анализ данных SQL и Анализ данных @databases_tg · 12.5K subscribers
Post #1070 3.16K
🧠 SQL-задача для продвинутых: как найти самые длинные серии входов без пропусков?

Представим таблицу logins:

user_id INT,
login_date DATE



Нужно определить: для каждого пользователя — самую длинную непрерывную последовательность дней, когда он заходил на сайт (без пропущенных дат).

💡 Хитрый приём: если пронумеровать входы с ROW_NUMBER(), то разность login_date - row_number будет постоянной в рамках серии подряд идущих дней. Это позволяет сгруппировать такие серии и посчитать их длину.

Вот решение:


WITH login_ranked AS (
SELECT
user_id,
login_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) AS rn
FROM logins
),
grouped AS (
SELECT
user_id,
login_date,
DATE_SUB(login_date, INTERVAL rn DAY) AS grp
FROM login_ranked
),
group_lengths AS (
SELECT
user_id,
grp,
COUNT(*) AS streak_length
FROM grouped
GROUP BY user_id, grp
)
SELECT
user_id,
MAX(streak_length) AS max_consecutive_days
FROM group_lengths
GROUP BY user_id
ORDER BY max_consecutive_days DESC;


📌 Подходит для задач с непрерывной активностью, логами, аналитикой по клиентам и временным последовательностям.
  • 👍 11
  • ❤ 1
More from @databases_tg
  1. Oct 2, 2026Как SQLite превращает числа в текст в 2 раза быстрее? Трюк с парами цифр Обычно число пере…
  2. Oct 2, 2026В субботу, 17 октября, Москва станет точкой притяжения для всех специалистов в области Rec…
  3. Oct 1, 2026Жиз
  4. Sep 30, 2026📝 5 уровней ИИ-агентов: от промпта до продакшена Context, loop, Jev, harness и evals: раз…
  5. Sep 26, 2026UPDATE — оператор обновления данных в MySQL 🗂️ Если в таблице нужно изменить значение в у…
  6. Sep 25, 2026🧠 SQL-задача с подвохом Есть таблица транзакций: CREATE TABLE transactions ( id int PRIMA…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →