Учитывая эту таблицу:Создать график с пересекающимися датами
CREATE TABLE positions
( "EMP_ID" CHAR(10 BYTE),
"GTYPE" NUMBER,
"AMT" NUMBER,
"START_DATE" DATE,
"STOP_DATE" DATE
)
и эти данные:
Insert Into positions (Emp_Id,Gtype,Amt,Start_Date,Stop_Date)
select 'XA0022',1,1000,'01-MAY-2010','08-MAY-2012' from dual union
Select 'XA0022',1,1000,'01-MAY-2010','31-DEC-2012' From Dual Union
Select 'XA0022',2,500,'03-APR-2012','15-JUL-2012' From Dual Union
Select 'XA0022',1,421,'01-MAY-2012','23-MAY-2012' From Dual Union
Select 'XA0022',1,1514,'09-MAY-2012','31-DEC-2012' From Dual union
select 'XA0022',1,600,'24-MAY-2012','24-MAY-2012' from dual;
Как получить это:
from to type1 type2
01-May-2010 02-Apr-2012 2000 0
03-Apr-2012 30-Apr-2012 2000 500
01-May-2012 07-May-2012 2421 500
08-May-2012 08-May-2012 2421 500
09-May-2012 22-May-2012 2935 500
23-May-2012 23-May-2012 2935 500
24-May-2012 15-Jul-2012 3114 500
16-Jul-2012 31-Dec-2012 3014 0
Примечание: Сумма действует на start_date и не действует на следующий день после stop_date.
Любые указатели с благодарностью получили!
Можете ли вы экстраполировать немного больше? Я не понимаю, как в него играют type1, type2. – Nick
Я думаю, что type1, type2 не самый сложный бит. Что я имею в качестве исходных данных является таблица с датой начала и окончания с количеством Некоторые из них даты начала/остановки перекрываться Что мне нужно, чтобы быть в состоянии вывести это общая сумма для каждого типа, который находится в каждый раз, когда позиция начинается или останавливается. Думайте об этом как о временной линии. С 01 мая 2010 года по 02-апр-12 всего типа1 = 2000, type2 = 0 Это связано с тем, что начиная с 01 мая-10 существует 2 типа типа 1, но это изменяется на 03 апреля- 12 как type2, поэтому тип 1 = 2000, type2 = 0 заканчивается в предыдущий день 02-апр-12 – lidbanger
Я думаю, что это псевдо-код того, что я хочу (игнорируя теперь свойство type1,2) 'code' случай, когда минимум ((following_rows.start_date-1), following_rows.end_date) между current_row.start_date и current_row.stop_date то мере ((following_rows.start_date-1), following_rows.end_date) еще current_row.end_date конец ' code' Я не могу получить окно раздела для работы, поскольку я хочу или сделать различие между текущей ro w и следующие строки. – lidbanger