Увеличение переменных даты в запросе и получение табличных результатов - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь сгенерировать таблицу, используя написанный мной запрос, который увеличивает дату на -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.

Я сейчас не вижу дрова для деревьев, есть идеи?

1 Ответ

0 голосов
/ 25 апреля 2019

Попробуйте сгруппировать по дате:

SELECT dtime, partnum, stock FROM Inventory 
   GROUP BY CONVERT(varchar, DTime, 111), partnum, stock
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...