SQLPytanie 10 z 14
Zadanie: aktywność przez 4 kolejne dni
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
Usuwam duplikaty dni, a następnie sprawdzam, czy trzeci poprzedni dzień aktywności jest odległy dokładnie o trzy dni.
SQL
-- activity(user_id, active_day date)
WITH days AS (
SELECT DISTINCT user_id, active_day
FROM activity WHERE active_day IS NOT NULL
), checked AS (
SELECT user_id, active_day,
LAG(active_day, 3) OVER (
PARTITION BY user_id ORDER BY active_day
) AS first_day
FROM days
)
SELECT DISTINCT user_id
FROM checked
WHERE active_day - first_day = 3;Dlaczego działa: po deduplikacji cztery uporządkowane, różne daty mieszczące się w trzech dniach muszą być kolejne. Dłuższa seria też spełnia warunek.
Pułapka: dla timestampów najpierw ustalam strefę czasową i datę biznesową. Nie używam LAG(..., 4), bo cztery dni to trzy odstępy.
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.