Sobes.tech
Назад к вопросам
Junior
14

-- Найти всех пассажиров, которые совершали поездки два или более дня подряд

Компании, где спрашивали
Яндекс

Ответ от нейросети

sobes.tech AI

Чтобы найти пассажиров, которые совершали поездки два или более дня подряд, можно использовать SQL с оконными функциями или группировками.

Пример на SQL (предполагается таблица trips с колонками passenger_id и 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;

Логика:

  • Для каждого пассажира упорядочиваем поездки по дате.
  • Сравниваем текущую дату с предыдущей, чтобы проверить, идут ли дни подряд.
  • Если есть хотя бы одна пара последовательных дней, пассажир попадает в результат.