我正在尝试使用我编写的查询生成一个表,该查询将日期递增-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
当然假设24-25之间的TxQty之和为2,而23-25之间的TxQty之和为5。
我现在看不到树木,任何想法?
尝试按日期分组,如下所示:
SELECT dtime, partnum, stock FROM Inventory
GROUP BY CONVERT(varchar, DTime, 111), partnum, stock