增加查询中的日期变量并生成表格结果

问题描述 投票:0回答:1

我正在尝试使用我编写的查询生成一个表,该查询将日期递增-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。

我现在看不到树木,任何想法?

sql-server
1个回答
0
投票

尝试按日期分组,如下所示:

SELECT dtime, partnum, stock FROM Inventory 
   GROUP BY CONVERT(varchar, DTime, 111), partnum, stock
© www.soinside.com 2019 - 2024. All rights reserved.