У меня есть таблица базы данных, которая вводится из необработанных данных. В нем есть список поездов, который отформатирован следующим образом:
RI TrainNo TripNo Location ArrTime DepTime
TS: 171 1 HMS 17280
TE: 171 8 UPM 45360
TS: 171 9 UPM 53640
TE: 171 16 HMS 87120
TS - это точка, с которой начинается поезд, а TE - точка, с которой заканчивается поезд.
Я хочу установить sh если поезд движется в определенное время, выполните следующий запрос:
SELECT DISTINCT tt.TrainNo
, s1.StartTime
, s1.StartTrip
, s1.StartLocation
, s2.StowTime
, s2.StowTrip
, s2.StowLocation
FROM `tt.data` tt
JOIN
( SELECT TrainNo
, DepTime as StartTime
, TripNo as StartTrip
, Location as StartLocation
FROM `tt.data`
WHERE RI = 'TS:'
) s1
JOIN
( SELECT TrainNo
, ArrTime StowTime
, TripNo StowTrip
, Location StowLocation
FROM `tt.data`
WHERE RI = 'TE:'
) s2
ON s1.TrainNo = tt.TrainNo
AND s1.TrainNo = s2.TrainNo
AND s1.StartTime < s2.StowTime
AND 45350 > s1.StartTime
AND 45350 < s2.StowTime
AND tt.TrainNo = 171
Вывод:
TrainNo StartTime StartTrip StartLocation StowTime StowTrip StowLocation
171 17280 1 HMS 45360 8 UPM
171 17280 1 HMS 87120 16 HMS
Первая строка верна, и поезд ход между трипсами 1 и 8. Однако второй ряд неверен, если время было больше 45360, то это сообщило бы мне, что поезд движется, хотя на самом деле он снова не работает до 53640.
Что бы быть хорошим способом удаления этой строки?
Надеюсь, это имеет смысл.
Спасибо!