← Wszystkie zadaniaSQL · Senior

Najdłuższa seria dni z rzędu

Dla każdego użytkownika znajdź najdłuższą serię dni z rzędu, w które się logował: kolumny user_id i longest_streak, według user_id. Kilka logowań jednego dnia liczy się jako jeden dzień, a seria może przechodzić przez granicę miesiąca.

Tabele

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

Testy (3)

Każdy test wypełnia tabele własnymi danymi i porównuje wynik twojego zapytania z oczekiwanym: te same kolumny (nazwy i kolejność) i te same wiersze w tej samej kolejności, więc ORDER BY ma znaczenie. Zapytanie działa w prawdziwym PostgreSQL prosto w przeglądarce; pierwsze uruchomienie go pobiera (około 5 MB).

  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');