在查询中增加日期变量并产生表格结果

时间:2019-04-25 16:24:17

标签: sql-server

我正在尝试使用我编写的查询生成一个表,该查询将日期加-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之间和23-25之间的TxQty之和为5。

我现在看不到树木的木头了,有什么主意吗?

1 个答案:

答案 0 :(得分:0)

尝试按以下日期分组:

SELECT dtime, partnum, stock FROM Inventory 
   GROUP BY CONVERT(varchar, DTime, 111), partnum, stock