Пожалуйста, попробуйте ниже запроса.
select a.user,a.time as 'ARRIVED',min(b.time) as 'LEFT'
from log a,log b
where a.user=b.user
and a.status='ARRIVED'
and b.status='LEFT'
and a.time<=b.time
group by a.user,a.time
Таблица содержит 6 записей, и при самостоятельном соединении с таблицей будет получено 36 записей, все комбинации, из которых мы можем отфильтровать то, что нам нужно.
Ниже приведены фильтры
1) Фильтр на основе пользователя, поскольку мы ищем только конкретные действия пользователя
2) Фильтры, которые нужно сравнить, ПРИБЫТЫ против ЛЕВЫХ
3) В течение любого ЛЕВОГО времени нам нужно искать только прибывшее время до ЛЕВОГО времени, и оно может быть таким же. (A.time <= b.time) * +1004 *
4) Группировка по времени пользователя и времени прибытия предоставит вам список всех ВЛЕВОГО времени, которое больше или равно времени прибытия для любого пользователя.
5) Агрегатор MIN используется, так как мы ищем только самое раннее левое время для данного пользователя прибывшего времени. </p>