这有点难以解释,但基本上我需要创建一个临时表(date datetime,#customers int),其中#customers是从另一个表中提取的每周客户数量。这是我的代码。
declare @date datetime
declare @temptable table (date datetime not null,#customers int)
set @date='2018-02-13'
while @date<getdate()
begin
insert into @temptable values
(@date,
(select count(*) from in_ft_conversion
where u4='cfa' and sales_date between @date and @date-7))
set @date=@date+7
end结果是一个包含所有正确日期条目的表,但customer列中的日期条目为0...有人知道我做错了什么吗?谢谢!
发布于 2019-02-13 19:47:25
您的日期范围错误,请在日期范围之间交换日期值,以便使用BETWEEN <earlier date> AND <later date>
where u4='cfa' and sales_date between @date-7 and @date))发布于 2019-02-13 19:56:14
为什么要使用while循环呢?我认为你想要这样的东西:
insert into @temptable (date, num_customers)
select dateadd(day, '2018-02-08', weekno * 7)
count(*)
from in_ft_conversion cross apply
(values (datediff(day, '2018-02-08', sales_date) / 7
) v(weekno)
where u4 = 'cfa' and sales_date >= '2018-02-08'
group by v.weekno;不需要循环。
您的问题特别是between比较:
sales_date between @date and @date-7日期是向后的--下限需要先走。
但是,我也怀疑你是否想用8天来计算周,并在每周有一天重叠。我认为上面的逻辑做了你想要的,但你可以调整日期算法来得到你想要的确切日期。
https://stackoverflow.com/questions/54669362
复制相似问题