База данных: Oracle База данных 12 c Релиз 12.2.0.1.0
Ниже приводится сценарий моего теста:
create table test
(
id number(1),
sdate date,
tdate date,
prnt_id number(1)
);
insert into test (id, sdate, tdate, prnt_id) values (1, to_date('10/17/2012','mm/dd/yyyy'), to_date('10/16/2014','mm/dd/yyyy'), 2);
insert into test (id, sdate, tdate, prnt_id) values (1, to_date('10/16/2014','mm/dd/yyyy'), to_date('2/16/2016','mm/dd/yyyy'), 2);
insert into test (id, sdate, tdate, prnt_id) values (1, to_date('2/16/2016','mm/dd/yyyy'), to_date('9/30/2016','mm/dd/yyyy'), 3);
insert into test (id, sdate, tdate, prnt_id) values (1, to_date('9/30/2016','mm/dd/yyyy'), to_date('3/16/2017','mm/dd/yyyy'), 3);
insert into test (id, sdate, tdate, prnt_id) values (1, to_date('3/16/2017','mm/dd/yyyy'), to_date('1/16/2019','mm/dd/yyyy'), 2);
insert into test (id, sdate, tdate, prnt_id) values (1, to_date('1/16/2019','mm/dd/yyyy'), to_date('10/16/2019','mm/dd/yyyy'), 2);
insert into test (id, sdate, tdate, prnt_id) values (1, to_date('10/16/2019','mm/dd/yyyy'), to_date('12/1/2999','mm/dd/yyyy'), 2);
commit;
select * from test order by sdate;
Вопрос:
I хотите изменить вышеуказанное Выберите SQL, который возвращает все 7 строк из тестовой таблицы, выбирает все столбцы плюс еще два столбца. Первый дополнительный столбец (min_sdate) вернется 17.10.2012 для строк 1,2 и 16.02.2016 для строк 3,4 и 16.03.2017 для строк 5,6,7. Второй дополнительный столбец (max_tdate) вернет 16.02.2016 для строк 1,2 и 16.03.2017 для строк 3,4 и 01.12.2999 для строк 5,6,7. По сути, я пытаюсь сгруппировать по столбцу prnt_id, но вместо двух групп (prnt_id: 2 и 3) я хочу три группы (prnt_id: 2,3,2), а затем для этих трех групп получим min (sdate) и макс (дата). Я думал, что мог бы использовать аналитическую функцию min () и max () с предложением window для достижения этой цели, но не знал, как создать рамку SQL.
. Любая или вся помощь будет оценена. Спасибо!