Поскольку ваш запрос относится к клиентам из той же таблицы, вам потребуется самостоятельное присоединение. То есть вы присоединяетесь к столу с собой.
SELECT ... FROM mytable JOIN mytable ...
Чтобы отличить guish один «экземпляр» таблицы от другого, вам понадобятся псевдонимы:
SELECT ... FROM mytable t1 JOIN mytable t2 ...
И вам нужны условия соединения , вот как связаны ваши два клиента. В вашем примере это довольно просто:
SELECT tcust.name AS name,
tother.name AS other_name
FROM mytable tcust
JOIN mytable tother
ON tcust.start_loc = tother.end_loc
AND tcust.dt >= tother.dt - INTERVAL '5' MINUTE;
Однако этот запрос дает немного другой результат. Можете ли вы узнать почему?
CREATE TABLE mytable (
dt DATE, name VARCHAR2(30 CHAR), start_loc VARCHAR2(5 CHAR),
end_loc VARCHAR2(5 CHAR), fare NUMBER);
INSERT INTO mytable VALUES (TIMESTAMP '2019-11-01 08:17:42', 'Jane', 'A', 'B', 10);
INSERT INTO mytable VALUES (TIMESTAMP '2019-11-01 08:18:02', 'Mary', 'C', 'A', 7);
INSERT INTO mytable VALUES (TIMESTAMP '2019-11-01 08:18:04', 'Tom', 'B', 'D', 12);
INSERT INTO mytable VALUES (TIMESTAMP '2019-11-01 08:20:11', 'Harry', 'E', 'C', 20);
INSERT INTO mytable VALUES (TIMESTAMP '2019-11-01 08:21:22', 'Alex', 'D', 'A', 5);
INSERT INTO mytable VALUES (TIMESTAMP '2019-11-01 08:24:30', 'Sally', 'C', 'B', 8);
Результат:
NAME OTHER_NAME
Tom Jane
Jane Mary
Alex Tom
Mary Harry
Sally Harry
Jane Alex
Вычитание 5 минут объясняется в этом вопросе .