Junior
-- Nájsť všetkých cestujúcich, ktorí podnikli cesty dva alebo viac dní po sebe
sobes.tech AI
Odpoveď od AI
Našli by ste cestujúcich, ktorí podnikli cesty v dvoch alebo viacerých po sebe nasledujúcich dňoch, pomocou SQL s okienkovými funkciami alebo skupinami.
Príklad v SQL (predpokladá sa tabuľka trips s stĺpcami passenger_id a trip_date):
WITH ordered_trips AS (
SELECT
passenger_id,
trip_date,
LAG(trip_date) OVER (PARTITION BY passenger_id ORDER BY trip_date) AS prev_date
FROM trips
), consecutive_days AS (
SELECT
passenger_id,
trip_date,
prev_date,
CASE WHEN trip_date = DATE_ADD(prev_date, INTERVAL 1 DAY) THEN 1 ELSE 0 END AS is_consecutive
FROM ordered_trips
), flagged AS (
SELECT passenger_id
FROM consecutive_days
WHERE is_consecutive = 1
GROUP BY passenger_id
)
SELECT DISTINCT passenger_id FROM flagged;
Logika:
- Pre každého cestujúceho sú cesty zoradené podľa dátumu.
- Porovnávame aktuálny dátum s predchádzajúcim, aby sme overili, či sú dni po sebe nasledujúce.
- Ak existuje aspoň jeden pár po sebe nasledujúcich dní, cestujúci sa zahrnie do výsledku.