Junior
-- Raskite visus keleivius, kurie keliavo du ar daugiau dienų iš eilės
sobes.tech AI
Atsakymas iš AI
Norėdami rasti keleivius, kurie keliavo dviejų ar daugiau iš eilės dienų, galite naudoti SQL su lango funkcijomis arba grupavimais.
Pavyzdys SQL (tarkime, yra lentelė trips su stulpeliais passenger_id ir 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:
- Kiekvieno keleivio kelionės yra surūšiuotos pagal datą.
- Palyginame dabartinę datą su ankstesne, kad patikrintume, ar dienos yra paeiliui.
- Jei yra bent viena pora paeiliui einančių dienų, keleivis įtraukiamas į rezultatą.