我正在尝试使用我编写的查询生成一个表,该查询将日期加-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。
我现在看不到树木的木头了,有什么主意吗?
答案 0 :(得分:0)
尝试按以下日期分组:
SELECT dtime, partnum, stock FROM Inventory
GROUP BY CONVERT(varchar, DTime, 111), partnum, stock