首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用每周聚合的其他表中的值创建临时表?

如何使用每周聚合的其他表中的值创建临时表?
EN

Stack Overflow用户
提问于 2019-02-13 19:43:32
回答 2查看 26关注 0票数 0

这有点难以解释,但基本上我需要创建一个临时表(date datetime,#customers int),其中#customers是从另一个表中提取的每周客户数量。这是我的代码。

代码语言:javascript
复制
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...有人知道我做错了什么吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-13 19:47:25

您的日期范围错误,请在日期范围之间交换日期值,以便使用BETWEEN <earlier date> AND <later date>

代码语言:javascript
复制
where u4='cfa' and sales_date between @date-7 and @date))
票数 1
EN

Stack Overflow用户

发布于 2019-02-13 19:56:14

为什么要使用while循环呢?我认为你想要这样的东西:

代码语言:javascript
复制
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比较:

代码语言:javascript
复制
sales_date between @date and @date-7

日期是向后的--下限需要先走。

但是,我也怀疑你是否想用8天来计算周,并在每周有一天重叠。我认为上面的逻辑做了你想要的,但你可以调整日期算法来得到你想要的确切日期。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54669362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档