Я пытаюсь определить баланс прогноза за вычетом заказов, но с некоторым пространством для маневра в датах. Из-за этой комнаты для маневра прогноз на 2/9/20 можно сопоставить с доставкой заказа в любом месте с 2/2/20 по 3/1/20. Аналогичным образом, отгрузка заказа 16.02.20 может считаться с прогнозом в любом месте с 9.09.2020 по 3/8/2020. Я пытался написать это, используя функцию суммирования по разделам по окнам, но меня забрасывает часть диапазона дат. Довольно легко получить текущий прогнозный баланс минус заказы с течением времени, но не тогда, когда диапазоны сумм начинаются и заканчиваются повсеместно.
Вот пример набора данных:
CREATE TABLE SAMPLEDATA
(
DMDUNIT VARCHAR2(50 BYTE),
DMDGROUP VARCHAR2(50 BYTE),
LOC VARCHAR2(50 BYTE),
EVENT_DATE DATE,
VALID_FROM DATE,
VALID_TO DATE,
FCSTID VARCHAR2(50 BYTE),
QTY NUMBER,
RANKER NUMBER,
BALANCE_DESIRED NUMBER
);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('02/09/2020','MM/DD/YYYY'),to_date('02/02/2020','MM/DD/YYYY'),to_date('03/01/2020','MM/DD/YYYY'),'FORECAST',8,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('02/16/2020','MM/DD/YYYY'),to_date('02/09/2020','MM/DD/YYYY'),to_date('03/08/2020','MM/DD/YYYY'),'ORDER',-20,0,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('02/16/2020','MM/DD/YYYY'),to_date('02/09/2020','MM/DD/YYYY'),to_date('03/08/2020','MM/DD/YYYY'),'FORECAST',8,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('02/23/2020','MM/DD/YYYY'),to_date('02/16/2020','MM/DD/YYYY'),to_date('03/15/2020','MM/DD/YYYY'),'ORDER',-40,0,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('02/23/2020','MM/DD/YYYY'),to_date('02/16/2020','MM/DD/YYYY'),to_date('03/15/2020','MM/DD/YYYY'),'FORECAST',13,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('02/23/2020','MM/DD/YYYY'),to_date('02/16/2020','MM/DD/YYYY'),to_date('03/15/2020','MM/DD/YYYY'),'FORECAST',37,2,6);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('03/01/2020','MM/DD/YYYY'),to_date('02/23/2020','MM/DD/YYYY'),to_date('03/22/2020','MM/DD/YYYY'),'FORECAST',24,1,24);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('03/08/2020','MM/DD/YYYY'),to_date('03/01/2020','MM/DD/YYYY'),to_date('03/29/2020','MM/DD/YYYY'),'FORECAST',7,1,7);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('03/15/2020','MM/DD/YYYY'),to_date('03/08/2020','MM/DD/YYYY'),to_date('04/05/2020','MM/DD/YYYY'),'FORECAST',8,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('03/22/2020','MM/DD/YYYY'),to_date('03/15/2020','MM/DD/YYYY'),to_date('04/12/2020','MM/DD/YYYY'),'ORDER',-15,0,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('03/22/2020','MM/DD/YYYY'),to_date('03/15/2020','MM/DD/YYYY'),to_date('04/12/2020','MM/DD/YYYY'),'FORECAST',5,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('03/29/2020','MM/DD/YYYY'),to_date('03/22/2020','MM/DD/YYYY'),to_date('04/19/2020','MM/DD/YYYY'),'FORECAST',9,1,7);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('04/05/2020','MM/DD/YYYY'),to_date('03/29/2020','MM/DD/YYYY'),to_date('04/26/2020','MM/DD/YYYY'),'FORECAST',7,1,7);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('04/12/2020','MM/DD/YYYY'),to_date('04/05/2020','MM/DD/YYYY'),to_date('05/03/2020','MM/DD/YYYY'),'FORECAST',7,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('04/19/2020','MM/DD/YYYY'),to_date('04/12/2020','MM/DD/YYYY'),to_date('05/10/2020','MM/DD/YYYY'),'ORDER',-50,0,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('04/19/2020','MM/DD/YYYY'),to_date('04/12/2020','MM/DD/YYYY'),to_date('05/10/2020','MM/DD/YYYY'),'FORECAST',7,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('04/26/2020','MM/DD/YYYY'),to_date('04/19/2020','MM/DD/YYYY'),to_date('05/17/2020','MM/DD/YYYY'),'FORECAST',7,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('05/03/2020','MM/DD/YYYY'),to_date('04/26/2020','MM/DD/YYYY'),to_date('05/24/2020','MM/DD/YYYY'),'ORDER',-14,0,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('05/03/2020','MM/DD/YYYY'),to_date('04/26/2020','MM/DD/YYYY'),to_date('05/24/2020','MM/DD/YYYY'),'FORECAST',7,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('05/10/2020','MM/DD/YYYY'),to_date('05/03/2020','MM/DD/YYYY'),to_date('05/31/2020','MM/DD/YYYY'),'FORECAST',23,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('05/17/2020','MM/DD/YYYY'),to_date('05/10/2020','MM/DD/YYYY'),to_date('06/07/2020','MM/DD/YYYY'),'FORECAST',7,1,0);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('05/24/2020','MM/DD/YYYY'),to_date('05/17/2020','MM/DD/YYYY'),to_date('06/14/2020','MM/DD/YYYY'),'FORECAST',9,1,2);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('05/31/2020','MM/DD/YYYY'),to_date('05/24/2020','MM/DD/YYYY'),to_date('06/21/2020','MM/DD/YYYY'),'FORECAST',8,1,8);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('06/07/2020','MM/DD/YYYY'),to_date('05/31/2020','MM/DD/YYYY'),to_date('06/28/2020','MM/DD/YYYY'),'FORECAST',16,1,16);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('06/14/2020','MM/DD/YYYY'),to_date('06/07/2020','MM/DD/YYYY'),to_date('07/05/2020','MM/DD/YYYY'),'FORECAST',6,1,6);
INSERT INTO SAMPLEDATA (DMDUNIT,DMDGROUP,LOC,EVENT_DATE,VALID_FROM,VALID_TO,FCSTID,QTY,RANKER,BALANCE_DESIRED) VALUES ('ITEM_A','CUSTOMER_B','LOCATION_C',to_date('06/21/2020','MM/DD/YYYY'),to_date('06/14/2020','MM/DD/YYYY'),to_date('07/12/2020','MM/DD/YYYY'),'FORECAST',16,1,16);
select sd.* from sampledata sd order by 1,2,3,4,8;
Столбец, помеченный как «Balance_Desired», представляет собой то, какими должны быть результаты функции суммы по окну. Например, заказ -20 в строке 2 охватывал весь прогноз в строке 1, строке 3 и частично (4 единицы) в строке 5. Заказ на 40 в строке 4 охватывал оставшиеся 9 в строке 5 и все, кроме единиц измерения. из строки 6.
Итак, как настроить скользящее окно в сумме по разделу, чтобы в конечном итоге он не учитывал один и тот же порядок для нескольких прогнозов?
Спасибо за ваши мысли,
Джон