0Pricing
Coding Interview Prep · Lektion

Geordnete Ereignisse und Zeitfenster

Mit Window Functions sicherstellen, dass Schritte in der richtigen Reihenfolge und innerhalb eines Zeitlimits stattfinden.

Geordnete Ereignisse und Zeitfenster ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Warum Reihenfolge und Zeit wichtig sind

Der einfache Funnel aus der vorherigen Lektion prüft nur, ob ein Nutzer jede Stufe ausgeführt hat. Ein genauer nachfragender Interviewer möchte wissen: Sind die Schritte in der richtigen Reihenfolge und innerhalb eines angemessenen Zeitraums erfolgt?

Ein Nutzer, der am Montag gekauft und am Freitag die Marketingseite besucht hat, ist nicht durch Ihren Funnel konvertiert. Reihenfolge und Zeit machen aus einem naiven Flag-basierten Funnel einen aussagekräftigen Funnel.

Der Ansatz mit dem ersten Zeitstempel pro Nutzer

Um die Reihenfolge zu bestimmen, erfassen Sie für jede Stufe den ersten Zeitpunkt jedes Nutzers: den frühesten Besuch, die früheste Anmeldung und den frühesten Kauf.

Eine saubere Conversion bedeutet dann first_signup_time >= first_visit_time und entsprechend für die weiteren Stufen. Mit MIN(event_time), gruppiert nach Stufe, erhalten Sie diese Bezugspunkte.

SELECT
  user_id,
  MIN(CASE WHEN event_name = 'visit'    THEN event_time END) AS first_visit,
  MIN(CASE WHEN event_name = 'signup'   THEN event_time END) AS first_signup,
  MIN(CASE WHEN event_name = 'purchase' THEN event_time END) AS first_purchase
FROM events
GROUP BY user_id;

Schritte in der richtigen Reihenfolge verlangen

Mit den ersten Zeitstempeln pro Stufe wird das Erzwingen der Reihenfolge zu einem Vergleich. Ein Nutzer hat wirklich zu Stufe 3 konvertiert, wenn jeder Zeitstempel ungleich NULL ist und die Zeitstempel monoton ansteigen.

Beachten Sie, dass ein NULL-Zeitstempel (die Stufe ist nie aufgetreten) den Vergleich automatisch scheitern lässt – genau das gewünschte Verhalten.

WITH t AS (
  SELECT user_id,
    MIN(CASE WHEN event_name='visit'    THEN event_time END) AS visit_t,
    MIN(CASE WHEN event_name='signup'   THEN event_time END) AS signup_t,
    MIN(CASE WHEN event_name='purchase' THEN event_time END) AS purchase_t
  FROM events GROUP BY user_id
)
SELECT COUNT(*) AS converted_in_order
FROM t
WHERE visit_t IS NOT NULL
  AND signup_t  >= visit_t
  AND purchase_t >= signup_t;

Ein Zeitfenster hinzufügen

Die meisten Funnels haben eine Frist: „Innerhalb von 7 Tagen nach dem ersten Besuch konvertieren.“ Fügen Sie eine Intervallgrenze zwischen der ersten und der letzten Stufe hinzu.

Datumsberechnungen unterscheiden sich je nach Dialekt. In Postgres können Sie visit_t + INTERVAL '7 days' schreiben; in MySQL verwenden Sie DATE_ADD(visit_t, INTERVAL 7 DAY). Geben Sie immer Ihren Dialekt an.

WITH t AS (
  SELECT user_id,
    MIN(CASE WHEN event_name='visit'    THEN event_time END) AS visit_t,
    MIN(CASE WHEN event_name='purchase' THEN event_time END) AS purchase_t
  FROM events GROUP BY user_id
)
SELECT COUNT(*) AS purchased_within_7d
FROM t
WHERE purchase_t >= visit_t
  AND purchase_t <  visit_t + INTERVAL '7 days';

Warum der erste und nicht irgendein Zeitstempel

Ein subtiler Punkt im Interview: Soll das Zeitfenster beim ersten Besuch des Nutzers beginnen oder beim letzten Besuch vor der Anmeldung? Das hängt von der Produktfrage ab.

  • First-Touch-Zeitfenster messen, wie viel Zeit vom ursprünglichen Interesse bis zur Conversion vergeht.
  • Last-Touch-Zeitfenster messen den Conversion-Sprint nach dem letzten Besuch.

Fragen Sie den Interviewer, welche Bedeutung gemeint ist. Eine bewusste Entscheidung signalisiert Seniorität.

Geordnete Ereignisse mit LEAD

Bei komplexen mehrstufigen Abläufen spielen Fensterfunktionen ihre Stärken aus. Sortieren Sie die Ereignisse jedes Nutzers nach Zeit und verwenden Sie anschließend LEAD, um das nächste Ereignis zu betrachten und zu prüfen, ob es der erwartete nächste Schritt ist.

Damit lassen sich Abläufe verarbeiten, in denen sich die Schritte mit nicht relevanten Ereignissen abwechseln.

SELECT
  user_id,
  event_name,
  event_time,
  LEAD(event_name) OVER (PARTITION BY user_id ORDER BY event_time) AS next_event,
  LEAD(event_time) OVER (PARTITION BY user_id ORDER BY event_time) AS next_time
FROM events;

Den nächsten erwarteten Schritt abgleichen

Bauen Sie auf LEAD auf: Behalten Sie die Zeilen, in denen auf ein 'visit' unmittelbar ein 'signup' folgt. So finden Sie echte sequenzielle Übergänge statt bloßer gemeinsamer Vorkommen.

Sie können diese Übergangsprüfungen verketten, um einen vollständigen geordneten Ablauf Schritt für Schritt zu validieren.

WITH seq AS (
  SELECT user_id, event_name, event_time,
    LEAD(event_name) OVER (PARTITION BY user_id ORDER BY event_time) AS next_event
  FROM events
)
SELECT COUNT(DISTINCT user_id) AS visit_then_signup
FROM seq
WHERE event_name = 'visit' AND next_event = 'signup';

Zeit zwischen aufeinanderfolgenden Stufen

Interviewer fragen gerne: „Wie lange dauert jede Stufe?“ Verwenden Sie LEAD für den Zeitstempel und bilden Sie die Differenz. Der Unterschied zwischen aufeinanderfolgenden Ereignissen ist die Verweildauer in dieser Stufe.

Aggregieren Sie den Median oder Durchschnitt pro Übergang, um die langsamste Funnel-Stufe zu finden.

WITH seq AS (
  SELECT user_id, event_name, event_time,
    LEAD(event_time) OVER (PARTITION BY user_id ORDER BY event_time) AS next_time
  FROM events
)
SELECT
  event_name,
  AVG(EXTRACT(EPOCH FROM (next_time - event_time)) / 3600.0) AS avg_hours_to_next
FROM seq
WHERE next_time IS NOT NULL
GROUP BY event_name;

Der Sonderfall identischer Zeitstempel

Was passiert, wenn zwei Ereignisse denselben event_time haben? Dann ist signup_t >= visit_t wahr, selbst wenn sie gleichzeitig stattgefunden haben, und die Reihenfolge ist allein anhand der Zeit nicht eindeutig.

  • Verwenden Sie >= bzw. > bewusst und erklären Sie warum.
  • Fügen Sie ORDER BY einen Tie-Breaker wie eine Ereignissequenz-ID hinzu, damit die Fensterfunktionen deterministisch sind.

Wenn Sie diesen Punkt ungefragt erwähnen, beeindruckt das Interviewer.

SELECT user_id, event_name,
  ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_time, event_id) AS step_seq
FROM events;

Reihenfolge und Zeitfenster in einer Abfrage kombinieren

Hier ist der vollständige Funnel mit korrekter Reihenfolge und innerhalb eines Zeitfensters. Er basiert auf dem ersten Besuch, verlangt, dass das erste Auftreten jeder späteren Stufe nach dem vorherigen liegt, und begrenzt den gesamten Ablauf auf 7 Tage.

Diese Antwort unterscheidet einen Kandidaten, der Funnels wirklich versteht, von einem, der lediglich Flags zählt.

WITH t AS (
  SELECT user_id,
    MIN(CASE WHEN event_name='visit'    THEN event_time END) AS v,
    MIN(CASE WHEN event_name='signup'   THEN event_time END) AS s,
    MIN(CASE WHEN event_name='purchase' THEN event_time END) AS p
  FROM events GROUP BY user_id
)
SELECT
  COUNT(*) FILTER (WHERE v IS NOT NULL)                                   AS visited,
  COUNT(*) FILTER (WHERE s >= v AND s < v + INTERVAL '7 days')            AS signed_up,
  COUNT(*) FILTER (WHERE s >= v AND p >= s AND p < v + INTERVAL '7 days') AS purchased
FROM t;

Hinweise zu verschiedenen SQL-Dialekten

Zwei Hinweise zur Portabilität beim Live-Coding:

  • FILTER (WHERE ...) bei Aggregationen ist Standard-SQL und funktioniert in Postgres. In MySQL oder älteren Engines verwenden Sie stattdessen SUM(CASE WHEN ... THEN 1 ELSE 0 END).
  • Die Syntax für Intervalle unterscheidet sich: Postgres + INTERVAL '7 days', MySQL DATE_ADD(d, INTERVAL 7 DAY), SQL Server DATEADD(day, 7, d).

Nennen Sie Ihre Annahme. Dem Interviewer ist der konkrete Dialekt dann meist egal – wichtig ist nur, dass Sie die Unterschiede kennen.

Schnelltest

Sie müssen Nutzer zählen, die den Ablauf visit -> signup -> purchase in dieser Reihenfolge innerhalb von 7 Tagen nach dem ersten Besuch abgeschlossen haben. Welcher Ansatz ist korrekt?

Zusammenfassung: Geordnete Ereignisse und Zeitfenster

Die wichtigsten Erkenntnisse:

  • Erfassen Sie den ersten Zeitstempel pro Schritt jedes Nutzers mit MIN(CASE ...).
  • Stellen Sie die Reihenfolge sicher, indem Sie verlangen, dass der Zeitpunkt jedes Schritts mindestens so spät wie der des vorherigen Schritts ist.
  • Begrenzen Sie den Pfad mit einem Zeitintervall und geben Sie die Syntax Ihres SQL-Dialekts an.
  • Verwenden Sie LEAD/LAG für Übergangsprüfungen und die Verweildauer zwischen Schritten.
  • Behandeln Sie Gleichstände bei identischen Zeitstempeln mit einem Tiebreaker in ORDER BY.

Als Nächstes: der Wechsel von Funnels zu Experimenten und die Berechnung von Metriken pro Variante.

Häufig gestellte Fragen

Ist die Lektion „Geordnete Ereignisse und Zeitfenster“ kostenlos?

Ja — der vollständige Text von „Geordnete Ereignisse und Zeitfenster“ 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 „Geordnete Ereignisse und Zeitfenster“?

Mit Window Functions sicherstellen, dass Schritte in der richtigen Reihenfolge und innerhalb eines Zeitlimits stattfinden. 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 2 von 4.

Wie lange dauert die Lektion „Geordnete Ereignisse und Zeitfenster“?

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

  1. Einen mehrstufigen Funnel erstellen
  2. Geordnete Ereignisse und Zeitfenster
  3. Zuweisung und Kennzahlen von A/B-Tests
  4. Lift, Signifikanz und Schutzprüfungen in SQL
← Zurück zu Coding Interview Prep