2014-09-03 2 views
0

У меня есть база данных, полная данных о движении поездов, когда поезд входит в станцию, мы можем получить сообщение о прибытии, и когда поезд покинет станцию, чтобы отправиться в следующий пункт назначения, мы можем получить departure сообщение.mysql group, где другое поле совпадает

поэтому, когда поезд добирается до станции, мы обычно получаем 2 сообщения 1, когда они прибывают, и 1, когда он улетит. Однако иногда есть ошибки в этих данных, и поэтому мы можем получить еще одно сообщение о движении, чтобы исправить данные о выезде/прибытии. Если сообщение движения является исправлением предыдущей, оно будет иметь значение__коррекции 1, иначе оно будет иметь значение коррекции_индекса 0.

Это означает, что для данной станции у нас может быть в общей сложности 4 сообщения (вылет, прибытие , фиксированный выезд, фиксированный заезд)

Я пытаюсь получить сообщения о вылетах 0/1 и сообщения о прибытии 0/1 для каждой станции по маршруту для конкретного поезда. Где мы выбираем сообщение движения в следующем порядке:

  • Пика фиксированного сообщения (если он существует) в противном случае
  • Пика первого сообщения движения (если он существует) в противном случае
  • ничего
  • не выбирает

Мой запрос выглядит следующим образом:

SELECT 
    tm.variation_status, 
    tm.planned_timestamp, 
    tm.platform, 
    tm.actual_timestamp, 
    tm.event_type, 
    tm.timetable_variation, 
    sched.tps_description 
FROM 
    train_activation ta, 
    train_movement tm 
     LEFT JOIN 
    cif_tiploc sched ON sched.stanox = tm.loc_stanox 
WHERE 
    train_uid = 'C40200' 
     AND date(creation_timestamp) = '2014-08-20' 
     AND tm.train_id = ta.train_id 
ORDER BY tm.correction_ind ASC 

проблема у меня с этим запросом для ая мы можем получить сообщения отправления 0-2 и сообщения о прибытии 0-2. Если я добавлю следующее GROUP BY tm.event_type (это поле, которое сообщает нам, является ли это сообщением о вылете или прибытии), мы получим всего 2 сообщения, так как они будут группировать все вместе с депатурой и всеми прибывшими!

Как я могу повторно написать этот запрос, поэтому мы выбираем только лучшее сообщение прибытия/дефатирования для каждой станции по маршруту?

  1. станция может быть идентифицирована tm.loc_stanox или sched.tps_description
  2. сообщение покажет нам, если сво развестись или прилета tm.event_type
  3. сообщение покажет нам, если его исправление к предыдущему сообщению, tm.correction_ind, который будет равен 1, если его коррекция или 0, если его нет

Любая помощь по этому вопросу будет изумительной.

ответ

0

Как насчет того, чтобы попробовать заказ в зависимости от случая/когда условие, но для каждой соответствующей станции.

заказ по tm.loc_stanox, случай, когда tm.event_type как '%' фиксированной затем 1 , когда tm.event_type, как 'прибывают%', то 2 , когда tm.event_type как 'отходят%' затем 3-й конец

Хотелось бы, чтобы у меня было больше образцов данных, чтобы увидеть реальные сценарии, которые вы описываете, чтобы лучше помочь.

Смежные вопросы