Aktuelle aktive Serie bis heute
Berechnen Sie eine laufende Serie und setzen Sie sie bei einer Unterbrechung zurück.
Aktuelle aktive Serie bis heute ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Die Produktfrage
Streak-Funktionen (denken Sie an Duolingo oder Snapchat) benötigen die aktuelle Streak, nicht die historisch längste. Die Frage im Vorstellungsgespräch lautet: „An wie vielen aufeinanderfolgenden Tagen bis einschließlich heute war jeder Benutzer aktiv? Setzen Sie den Wert auf 0 zurück, wenn der Benutzer heute nicht aktiv war.“
Das bringt eine Besonderheit mit sich: Die Streak muss an heute verankert sein (oder gemäß einer Kulanzregel an gestern). Wir bauen sie auf der Grundlage des Ihnen bereits bekannten Lücken-und-Inseln-Musters auf.
Aktivität definieren
Klären Sie zunächst die Regeln mit Ihrem Interviewer — diese Entscheidungen verändern die Abfrage:
- Erfordert die Streak Aktivität heute, oder ist gestern ebenfalls zulässig (Kulanzzeitraum)?
- Werden mehrere Ereignisse pro Tag zu einem Tag zusammengefasst?
- Welche Zeitzone definiert einen „Tag“?
Wir nehmen an, dass es eine Zeile pro aktivem Tag gibt und die Streak aktuell ist, wenn sie heute ODER gestern einschließt.
Die Inseln erneut bilden
Verwenden Sie den Anker erneut: Nummerieren Sie die Tage jedes Benutzers nach Datum und subtrahieren Sie die Nummer. Jede aufeinanderfolgende Folge hat denselben Anker. Die aktuelle Streak ist einfach die Insel, deren letzter Tag heute oder gestern ist.
WITH numbered AS (
SELECT user_id, login_date,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY login_date
) AS rn
FROM logins
),
islands AS (
SELECT user_id,
MIN(login_date) AS streak_start,
MAX(login_date) AS streak_end,
COUNT(*) AS streak_len
FROM numbered
GROUP BY user_id, login_date - rn
)
SELECT * FROM islands;Die letzte Insel ermitteln
Die zeitlich letzte Insel jedes Benutzers ist diejenige mit dem größten streak_end. Wir prüfen, ob dieses Ende aktuell genug ist, um als laufend zu gelten.
CURRENT_DATE liefert das heutige Datum. CURRENT_DATE - 1 ist gestern. Wenn streak_end einem dieser beiden Werte entspricht, ist die Streak aktiv.
WITH /* ...numbered, islands... */
latest AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY streak_end DESC
) AS rn2
FROM islands
)
SELECT * FROM latest WHERE rn2 = 1;Die Aktualität prüfen
Entscheiden Sie nun, ob die letzte Insel aktiv ist. Liegt ihr Enddatum heute oder gestern, entspricht die aktuelle Streak ihrer Länge. Andernfalls hat der Benutzer seine Streak unterbrochen und der aktuelle Wert ist 0.
SELECT user_id,
CASE
WHEN streak_end >= CURRENT_DATE - 1
THEN streak_len
ELSE 0
END AS current_streak
FROM latest
WHERE rn2 = 1;Die vollständige Abfrage für die aktuelle Streak
Fügen Sie alle Ebenen zusammen: Nummerieren Sie die Zeilen, bilden Sie die Inseln, wählen Sie die letzte Insel pro Benutzer aus und wenden Sie anschließend das Recency-CASE an. Dies ist die vollständige Lösung.
WITH numbered AS (
SELECT user_id, login_date,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY login_date
) AS rn
FROM logins
),
islands AS (
SELECT user_id,
MAX(login_date) AS streak_end,
COUNT(*) AS streak_len
FROM numbered
GROUP BY user_id, login_date - rn
),
latest AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY streak_end DESC
) AS rn2
FROM islands
)
SELECT user_id,
CASE WHEN streak_end >= CURRENT_DATE - 1
THEN streak_len ELSE 0 END AS current_streak
FROM latest
WHERE rn2 = 1
ORDER BY user_id;Strenge Regel: Nur heute
Wenn die Geschäftsregel streng ist — die Streak ist nur aktiv, wenn der Benutzer heute aktiv war — ändern Sie den Vergleich so, dass streak_end = CURRENT_DATE erforderlich ist.
Die Version mit Kulanzzeitraum (>= CURRENT_DATE - 1) ist benutzerfreundlicher und in echten Anwendungen üblich, da der Tag noch nicht vorbei ist. Klären Sie immer, welche Variante der Interviewer erwartet.
CASE WHEN streak_end = CURRENT_DATE
THEN streak_len ELSE 0 END AS current_streakEine Alternative: rückwärts gehen
Ein anderes Denkmodell, das manche Interviewer bevorzugen: Berechnen Sie den Abstand jedes Tages bis heute. Ein Tag gehört nur dann zur aktuellen Streak, wenn jeder Tag von diesem Tag bis einschließlich heute vorhanden ist. Entsprechend vergleichen Sie login_date mit CURRENT_DATE - (offset from the latest).
Die Inselmethode ist normalerweise übersichtlicher, aber eine Alternative zu kennen, zeigt ein tieferes Verständnis. Die zentrale Idee ist dieselbe: eine ununterbrochene, an heute verankerte Kette.
Inaktive Benutzer einbeziehen
Benutzer, die in logins fehlen, haben keine Insel und verschwinden aus dem Ergebnis. Wenn für jeden Benutzer eine Streak ausgegeben werden muss (wahrscheinlich 0), verwenden Sie einen LEFT JOIN der Benutzerliste und setzen Sie das Ergebnis mit COALESCE auf 0.
SELECT u.user_id,
COALESCE(s.current_streak, 0) AS current_streak
FROM users u
LEFT JOIN current_streaks s ON s.user_id = u.user_id;Stolperfallen bei Zeitzonen
Wenn die Aktivität als Zeitstempel gespeichert wird, hängt „heute“ von der Zeitzone ab. Konvertieren Sie den Zeitstempel, bevor Sie ihn auf ein Datum kürzen.
- Speichern und vergleichen Sie in UTC oder konvertieren Sie zuerst in die lokale Zeitzone des Benutzers.
- Verwenden Sie in Postgres
event_ts AT TIME ZONE 'UTC' AT TIME ZONE user_tzund wandeln Sie das Ergebnis anschließend in ein Datum um. - Ein naives
::dateauf einem UTC-Zeitstempel kann ein Ereignis am Abend dem falschen Kalendertag zuordnen.
Wenn Sie dies erwähnen, kommen Sie einer klassischen Nachfrage zu diesem Problem zuvor.
SELECT user_id,
(event_ts AT TIME ZONE 'UTC'
AT TIME ZONE 'America/New_York')::date AS local_day
FROM events;Performance und Abschluss
Für häufig aktualisierte Dashboards wird diese Abfrage pro Benutzer in einem einzigen Durchlauf ausgeführt. Damit sie schnell bleibt:
- Erstellen Sie einen Index auf
(user_id, login_date). - Beschränken Sie die Eingabe optional auf aktuelle Daten — eine aktuelle Streak kann keine Daten enthalten, die älter als ihre eigene Länge sind, daher reicht ein gleitendes Fenster von beispielsweise 400 Tagen aus.
- Materialisieren Sie die täglichen Daten in einer Streak-Tabelle, wenn sie sehr häufig gelesen werden.
Kurzer Test
Prüfen Sie, ob Sie den Anker für „jetzt“ verstanden haben.
Zusammenfassung
So berechnen Sie die aktuelle aktive Streak mit Stand heute:
- Bilden Sie Inseln mit dem Anker
login_date - ROW_NUMBER(). - Wählen Sie anhand des maximalen
streak_enddie letzte Insel jedes Benutzers aus. - Geben Sie ihre Länge nur dann zurück, wenn
streak_endheute ist (oder gestern bei einem Kulanzzeitraum), andernfalls 0. - Verwenden Sie einen LEFT JOIN von users für inaktive Konten und berücksichtigen Sie Zeitzonen, bevor Sie auf ein Datum kürzen.
Sie beherrschen nun das vollständige Werkzeugset für Streak-Analysen: Folgen erkennen, längste Streaks bestimmen, Bedingungen über N aufeinanderfolgende Zeilen prüfen und aktive Streaks ermitteln.
Lerne Coding Interview Prep mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 90
- Lektionen
- 360
Häufig gestellte Fragen
Ist die Lektion „Aktuelle aktive Serie bis heute“ kostenlos?
Ja — der vollständige Text von „Aktuelle aktive Serie bis heute“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Aktuelle aktive Serie bis heute“?
Berechnen Sie eine laufende Serie und setzen Sie sie bei einer Unterbrechung zurück. Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Aktuelle aktive Serie bis heute“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Aufeinanderfolgende Kalendertage erkennen
- Längste Serie pro Benutzer
- N aufeinanderfolgende Zeilen mit erfüllter Bedingung
- Aktuelle aktive Serie bis heute