Sobes.tech
Junior

-- Najít všechny cestující, kteří podnikli cesty dva nebo více dnů po sobě

sobes.tech AI

Odpověď od AI

Pro nalezení cestujících, kteří podnikli cesty ve dvou nebo více po sobě jdoucích dnech, lze použít SQL s okénkovými funkcemi nebo seskupeními.

Příklad v SQL (předpokládá se tabulka trips se sloupci 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:

  • Pro každého cestujícího jsou cesty seřazeny podle data.
  • Porovnáváme aktuální datum s předchozím, abychom zjistili, zda jsou dny po sobě jdoucí.
  • Pokud existuje alespoň jeden pár po sobě jdoucích dnů, cestující je zahrnut do výsledku.