Sobes.tech
Junior

-- Keresse meg az összes utast, akik két vagy több egymást követő napot utaztak

sobes.tech MI

Válasz az MI-től

Két vagy több egymást követő napon tett utazást végző utasokat SQL segítségével, abban az esetben, ha ablakfüggvényeket vagy csoportosítást alkalmazunk.

SQL példa (feltételezve, hogy van egy trips nevű tábla, amelyben passenger_id és trip_date oszlopok találhatók):

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:

  • Minden utas esetében a utazásokat dátum szerint rendezzük.
  • Összehasonlítjuk az aktuális dátumot az előzővel, hogy ellenőrizzük, egymást követő napokról van-e szó.
  • Ha legalább egy páros egymást követő napot találunk, az utas szerepel a eredményben.