Вы можете напрямую использовать grouping by ID_NCM,DESTINATION
с функциями min
и max
:
with t(ID_NCM,DESTINATION,"START","END") as
(
select 36393,'PE',date'2018-01-01',date'2018-10-31' from dual union all
select 36393,'PE',date'2018-01-11',date'9999-12-31' from dual
)
select ID_NCM,DESTINATION,
min("START") as CURRENT_START,min("END") as CURRENT_END,
max("START") as FUTURE_START,max("END") as FUTURE_END
from t
group by ID_NCM,DESTINATION
ID_NCM DESTINATION CURRENT_START CURRENT_END FUTURE_START FUTURE_END
------ ----------- ------------- ------------ ------------ -----------
36393 PE 01.01.2018 31.10.2018 11.01.2018 31.12.9999
PS START
и END
являются зарезервированными ключевыми словами в Oracle
, поэтомузаключили их в двойные кавычки.
Редактировать: Из-за вашего последнего комментария вы можете внести изменения, добавив коррелированный подзапрос, как в следующем стиле:
with t(ID_NCM,DESTINATION,"START","END",tax_rate) as
(
select 36393,'PE',date'2018-01-01',date'2018-10-31',0.06 from dual union all
select 36393,'PE',date'2018-01-11',date'9999-12-31',0.04 from dual
)
select ID_NCM,DESTINATION,
min("START") as CURRENT_START,min("END") as CURRENT_END,
max("START") as FUTURE_START,max("END") as FUTURE_END,
(select tax_rate from t where "START"=date'2018-01-01' and "END"=date'2018-10-31')
as current_rate,
(select tax_rate from t where "START"=date'2018-01-11' and "END"=date'9999-12-31')
as future_rate
from t
group by ID_NCM,DESTINATION
ID_NCM DEST CURRENT_START CURRENT_END FUTURE_START FUTURE_END CURRENT_RATE FUTURE_RATE
------ ----- ------------- ------------ ------------ ----------- ----------- -----------
36393 PE 01.01.2018 31.10.2018 11.01.2018 31.12.9999 0,06 0,04
Отредактированный демонстратор Rextester