← Alle AufgabenSQL · Senior

Die längste Serie aufeinanderfolgender Tage

Finde für jeden Nutzer die längste Serie aufeinanderfolgender Tage, an denen er sich angemeldet hat: Spalten user_id und longest_streak, sortiert nach user_id. Mehrere Anmeldungen an einem Tag zählen als ein Tag, und eine Serie kann über eine Monatsgrenze gehen.

Tabellen

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

Tests (3)

Jeder Test füllt die Tabellen mit eigenen Daten und vergleicht das Ergebnis deiner Abfrage mit dem erwarteten: dieselben Spalten (Namen und Reihenfolge) und dieselben Zeilen in derselben Reihenfolge, ORDER BY zählt also. Die Abfrage läuft in echtem PostgreSQL direkt im Browser; der erste Start lädt es herunter (etwa 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');