Я пытаюсь сгенерировать таблицу, используя написанный мной запрос, который увеличивает дату на -1, затем перезапускает запрос до тех пор, пока дата не уменьшится до указанного значения.
Я пробовал сочетания циклов while и соединения двух CTE, но я продолжаю работать в тупике.
Здесь у меня ближе всего первый цикл:
declare @dtime date
set @dtime = getdate()
begin
while @dtime > getdate() -5
(select @dtime as dtime,Partnum,OnHandQty + (sum(TxQty) where TxDate > @dtime) Stock
where Partnum = x);
(select @dtime = dateadd(day,-1,@dtime)
end
Однако, это просто возвращает повторяющиеся значения сегодняшней даты с фиксированным значением Stock, которое на самом деле является правильным для сегодняшнего дня, но цикл не повторяется с убывающими датами.
Затем я попытался использовать CTE:
with CTE_Days as
(select getdate() as dtime
union all
select dtime -1
from CTE_days
where dtime > getdate() -365),
CTE_Inventory as
(select Partnum,OnHandQty +
(sum(TxQty) where TxDate > (select dtime from CTE_Days)) Stock
where Partnum = x),
begin
while (select dtime from CTE_Days) > getdate() -365
select partnum,descrip,plant,dtime,stock
from CTE_Days
cross join CTE_Inventory
order by dtime desc
Возвращает «подзапрос возвратил более 1 значения».
Итак, я ожидал таблицу, подобную этой:
dtime |partnum |Stock
2019-04-25 |x |10
2019-04-24 |x |12
2019-04-23 |x |15
Предполагая, конечно, что сумма TxQty между 24-25 была 2, а между 23-25 - 5.
Я сейчас не вижу дрова для деревьев, есть идеи?