Расчет итогов за предварительный период, исключая подсчеты до ретроспективного и после отчетного года - PullRequest
0 голосов
/ 30 мая 2020

Предполагается, что ученик съедает только 1 конфету в день. Мне нужно узнать, сколько конфет студент съел перед началом школы (как показано в столбце «Total_candies_consumed_one_year_before_start_of_school» красным шрифтом). Мои данные показаны в таблице черным шрифтом. Я вычислил выделенный столбец. Я объяснил, как рассчитать «Total_candies_consumed_one_year_before_start_of_school». enter image description here

Я застрял в том, как исключить подсчеты, которые произошли до «1_year_lookback_period» и после «даты начала обучения в школе».

Любая помощь приветствуется.

1 Ответ

1 голос
/ 30 мая 2020

Я думаю, что вы ищете какую-то линейную регрессию.

Идея состоит в том, чтобы оценить, сколько конфет было потреблено в течение года, предшествующего school_start_date, путем вычисления количества дней перекрытия между этим периодом и диапазоном дат, определенным purchase_date и consumed_date из конфеты. На основе коэффициента перекрытия вы можете спрогнозировать потребление в течение периода ретроспективного анализа.

Это должно делать то, что вы хотите:

select
    t.*,
    number_of_candies *
        greatest(
            least(school_start_date, consumed_date) 
            - greatest(purchase_date, add_months(school_start_date, -12)), 
            0
        ) / (consumed_date - purchase_date) candies_consumed_during_loopback
from mytable t

Демо на DB Fiddle :

ID | PURCHASE_DATE | NUMBER_OF_CANDIES | CONSUMED_DATE | SCHOOL_START_DATE | RES
-: | :------------ | ----------------: | :------------ | :---------------- | --:
 1 | 30-DEC-09     |                15 | 14-JAN-10     | 01-JAN-11         |  13
 1 | 30-MAY-10     |                30 | 29-JUN-10     | 01-JAN-11         |  30
 2 | 01-NOV-10     |                90 | 30-JAN-11     | 01-JAN-11         |  61
 2 | 09-AUG-12     |                15 | 24-AUG-12     | 01-JAN-11         |   0
 3 | 01-DEC-14     |               900 | 19-MAY-17     | 01-JAN-16         | 365
...