← Усі задачіSQL · Senior

Найдовша серія днів поспіль

Для кожного користувача знайдіть найдовшу серію днів поспіль, коли він заходив: колонки user_id і longest_streak, за user_id. Кілька входів за день рахуються як один день, а серія може переходити через межу місяця.

Таблиці

CREATE TABLE logins (
  user_id int NOT NULL,
  day     date NOT NULL  -- several logins on the same day are possible
);

Тести (3)

Кожен тест заповнює таблиці своїми даними й порівнює результат вашого запиту з очікуваним: ті самі колонки (назви й порядок) і ті самі рядки в тому самому порядку, тож ORDER BY важливий. Запит виконується в справжньому PostgreSQL просто в браузері; перший запуск завантажує його (близько 5 МБ).

  1. INSERT INTO logins VALUES
      (1, '2024-01-01'), (1, '2024-01-02'), (1, '2024-01-03'),
      (1, '2024-01-05'), (1, '2024-01-06'),
      (2, '2024-01-10');
  2. -- duplicate logins on one day and a streak across months
    INSERT INTO logins VALUES
      (1, '2024-01-30'), (1, '2024-01-30'), (1, '2024-01-31'),
      (1, '2024-02-01'), (1, '2024-02-03'),
      (2, '2024-03-01'), (2, '2024-03-03'), (2, '2024-03-05');
  3. -- the longest streak is the later one
    INSERT INTO logins VALUES
      (5, '2024-06-01'),
      (5, '2024-06-10'), (5, '2024-06-11'), (5, '2024-06-12'), (5, '2024-06-13');