By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
select * from V$VERSION;
BANNER | BANNER_FULL | BANNER_LEGACY | CON_ID |
---|---|---|---|
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production | Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production Version 18.4.0.0.0 |
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production | 0 |
alter session set nls_date_format = 'dd/mm/yyyy hh24:mi:ss'
with x ( Vehicle , Start_Letter ,End_Letter , Date_Letter )
as
(
select 'Truck A' , 'A' , 'B' , to_date('02/01/2021 01:00:00','dd/mm/yyyy hh24:mi:ss') from dual union all
select 'Truck A' , 'B' , 'C' , to_date('02/01/2021 02:00:00','dd/mm/yyyy hh24:mi:ss') from dual union all
select 'Truck A' , 'C' , 'D' , to_date('04/01/2021 03:00:00','dd/mm/yyyy hh24:mi:ss') from dual union all
select 'Truck B' , 'C' , 'A' , to_date('05/01/2021 01:00:00','dd/mm/yyyy hh24:mi:ss') from dual union all
select 'Truck B' , 'A' , 'B' , to_date('06/01/2021 01:00:00','dd/mm/yyyy hh24:mi:ss') from dual union all
select 'Truck C' , 'C' , 'B' , to_date('07/01/2021 01:00:00','dd/mm/yyyy hh24:mi:ss') from dual union all
select 'Truck C' , 'B' , 'C' , to_date('08/01/2021 01:00:00','dd/mm/yyyy hh24:mi:ss') from dual union all
select 'Truck C' , 'C' , 'B' , to_date('09/01/2021 01:00:00','dd/mm/yyyy hh24:mi:ss') from dual union all
select 'Truck C' , 'B' , 'A' , to_date('10/01/2021 01:00:00','dd/mm/yyyy hh24:mi:ss') from dual
)
select vehicle , start_letter, end_letter, date_letter from
(
select vehicle , min_start_lett as start_letter, max_start_lett as end_letter, date_letter,
row_number() over(partition by vehicle order by date_letter desc) as ranking
from
(
select x.* ,
rank() over(partition by vehicle order by start_letter desc, end_letter desc, date_letter desc ) as rn ,
min(start_letter) over(partition by vehicle) as min_start_lett ,
max(end_letter) over(partition by vehicle) as max_start_lett
from x
) d
where rn = ( select max(rn) from x c where c.vehicle = d.vehicle group by vehicle )
) where ranking = 1
;
VEHICLE | START_LETTER | END_LETTER | DATE_LETTER |
---|---|---|---|
Truck A | A | D | 04/01/2021 03:00:00 |
Truck B | A | B | 06/01/2021 01:00:00 |
Truck C | B | C | 10/01/2021 01:00:00 |