Расчет хранения на основе диапазона дат и месячного потребления с использованием SQL - PullRequest
0 голосов
/ 29 января 2020

У меня есть таблица ClientProfile с нижними столбцами

  • StartDate date
  • Units Numeric(18,0)
  • MonthlyIntake Numeric(18,0)
  • ContractMonths Numeric(18,0)

Пользователь должен выбрать диапазон дат, и запрос должен иметь возможность выбрать количество единиц, хранящихся в хранилище, в пределах этот диапазон дат.

Например:
StartDate проекта равно 2019-03-01 (1st March), общее количество Units равно 15000, MonthlyIntake единиц равно 5000 и ContractMonths для хранения их в области хранения - 6 months. Поэтому, когда пользователь выбирает диапазон дат от 01-2019 до 12-2019, я могу получить такой результат:

Month      Capacity
-------------------
01-2019    0
02-2019    0
03-2019    5000
04-2019    10000
05-2019    15000
06-2019    15000
07-2019    15000
08-2019    15000
09-2019    0
10-2019    0
11-2019    0
12-2019    0

Я был бы очень признателен за любую помощь, которую смогу получить. Спасибо

1 Ответ

0 голосов
/ 29 января 2020

Вы можете использовать рекурсивный подзапрос для расширения данных:

with cte as (
      select startdate as mon, units, monthlyintake, contractmonths
      from clientprofile
      union all
      select dateadd(month, 1, startdate) as mon, units + monthyintake, monthlyintake, contractmonths - 1
      from cte
      where contractmonths > 0
     )
select * 
from cte;

Это дает вам ненулевые значения для каждого месяца. Вы можете присоединиться к календарной таблице, чтобы получить нулевые значения.

...