Sobes.tech
Junior

-- İki və ya daha çox gün ardıcıl səyahət edən bütün sərnişinləri tapın

sobes.tech Süni İntellekt

AI-dan cavab

İki və ya daha çox ardıcıl gün ərzində səyahət edən sərnişinləri tapmaq üçün SQL-də pəncərə funksiyalarından və ya qruplaşdırmalardan istifadə etmək olar.

SQL nümunəsi (tutaq ki, trips cədvəli passenger_id və trip_date sütunlarına malikdir):

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;

Loqika:

  • Hər bir sərnişin üçün səyahətlər tarixə görə sıralanır.
  • Cari tarix əvvəlki ilə müqayisə edilir ki, günlərin ardıcıl olub-olmadığı yoxlanılsın.
  • Ən azı bir cüt ardıcıl gün tapılsa, sərnişin nəticələrə daxil edilir.