By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE table_name (Vehicle, "START", "END", "DATE") AS
SELECT 'Truck A', 'A', 'B', DATE '2021-01-02' + INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck A', 'B', 'C', DATE '2021-01-02' + INTERVAL '2' HOUR FROM DUAL UNION ALL
SELECT 'Truck A', 'C', 'D', DATE '2021-01-04' + INTERVAL '3' HOUR FROM DUAL UNION ALL
SELECT 'Truck B', 'C', 'A', DATE '2021-01-05' + INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck B', 'A', 'B', DATE '2021-01-06' + INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck C', 'C', 'B', DATE '2021-01-07' + INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck C', 'B', 'C', DATE '2021-01-08' + INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck C', 'C', 'B', DATE '2021-01-09' + INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck C', 'B', 'A', DATE '2021-01-10' + INTERVAL '1' HOUR FROM DUAL
9 rows affected
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
SELECT vehicle,
MIN("START") KEEP (DENSE_RANK FIRST ORDER BY "DATE") AS "START",
MAX("END") KEEP (DENSE_RANK LAST ORDER BY "DATE") AS "END",
MAX("DATE") AS "DATE"
FROM table_name
GROUP BY vehicle
VEHICLE | START | END | DATE |
---|---|---|---|
Truck A | A | D | 2021-01-04 03:00:00 |
Truck B | C | B | 2021-01-06 01:00:00 |
Truck C | C | A | 2021-01-10 01:00:00 |