Вы можете сделать это, используя переменные SQL, чтобы помочь контролировать изменения адреса, даже если они происходят несколько раз.Не имея MySQL в свободном доступе, я бы подошел к чему-то похожему ниже.Начните с внутреннего запроса, который помечает «GroupSeq» на основании изменения либо транспортного средства, либо адреса.Сохраняйте порядок по дате / времени.После того, как каждый тест против @lastGroup либо оставлен один, либо добавлен 1 к последовательности, ТО обновляет @lastAddress и @lastVehicle в качестве основы для выбора СЛЕДУЮЩЕЙ записи в наборе результатов для сравнения.
Для каждогоНапример, результаты каждого клиента будут (все эти же транспортные средства, поэтому не дублируя отображение этого столбца) Адрес GroupSeq Hulamin 1 SACD 2 UL 3 NP 4 Hulamin 5 SACD 6
После этого вы можете затем правильносделайте ваш MIN / MAX на основе назначенного GroupSeq.
select
PreQuery.Vehicle,
PreQuery.Address,
PreQuery.GroupSeq,
MIN( PreQuery.`DateTime` ) as InTime,
MAX( PreQuery.`DateTime` ) as OutTime
from
( select
YT.Vehicle,
YT.Address,
YT.`DateTime`,
YT.Direction,
@lastGroup := @lastGroup + if( @lastAddress = YT.Address
AND @lastVehicle = YT.Vehicle, 0, 1 ) as GroupSeq,
@lastVehicle := YT.Vehicle as justVarVehicleChange,
@lastAddress := YT.Address as justVarAddressChange
from
YourTable YT,
( select @lastVehicle := '',
@lastAddress := '',
@lastGroup := 0 ) SQLVars
order by
YT.`DateTime` ) PreQuery
Group By
PreQuery.Vehicle,
PreQuery.Address,
PreQuery.GroupSeq
Вышеуказанное ДОЛЖНО привести к чему-то вроде
Vehicle Address GroupSeq InTime OutTime
RB10 Hulamin 1 10:19 10:35
RB10 SACD 2 10:37 10:40
RB10 UL 3 10:41 11:06
RB10 NP 4 11:07 11:14
RB10 Hulamin 5 11:14 11:28
RB10 SACD 6 11:29 12:21
Теперь вышеприведенный образец фактически не вычисляет общее время, затрачиваемое на вход-выход, и среднее значение для транспортного средства / клиентасреднее время обработки, но вы можете добавить эти вычисления после того, как поймете и получите эту часть.
Обратите внимание, это основано на естественном порядке, который отображается по дате / времени.Похоже, что одна транзакция от начала до конца может иметь много «IN», но ВСЕГДА заканчивается «OUT», прежде чем перейти к следующему адресу клиента.Если это неверное предположение, очевидно, что необходимо внести изменения.