Sobes.tech
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ą.