首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在固定时间窗口中为每个记录获取列的分区和

在固定时间窗口中为每个记录获取列的分区和
EN

Stack Overflow用户
提问于 2018-06-26 09:17:21
回答 2查看 53关注 0票数 2
代码语言:javascript
复制
TelNo   | OrderDate     | Orders  
A       | 2017-01-01    | 5  
A       | 2017-02-02    | 4  
A       | 2017-07-05    | 6  
A       | 2017-09-10    | 10  
B       | 2017-03-01    | 3  
B       | 2017-04-12    | 6  
B       | 2017-11-10    | 4  

上面是order表,要求在最后6个月内为每个“TelNo”找到“OrderDate”与表中每条记录的“订单”之和。以下是预期产出;

代码语言:javascript
复制
TelNo   | OrderDate     | Sum_of_orders  
A       | 2017-01-01    | 5  
A       | 2017-02-02    | 9  
A       | 2017-07-05    | 10  
A       | 2017-09-10    | 16  
B       | 2017-03-01    | 3  
B       | 2017-04-12    | 9  
B       | 2017-11-10    | 4  

我尝试过CTE和sum(case -)的不同组合(按-)方法(通过-)进行分区(SQL-server-2016),但没有找到解决方案。感谢有人能在这方面提供帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-06-26 10:19:33

我会使用apply

代码语言:javascript
复制
select t.TelNo, t.OrderDate, tt.Sum_of_orders  
from table t cross apply (
     select sum(t1.orders) Sum_of_orders
     from table t1
     where t1.TelNo = t.TelNo and
           t1.OrderDate >= dateadd(mm, -6, t.orderdate) and 
           t1.OrderDate <= t.OrderDate
) tt;
票数 0
EN

Stack Overflow用户

发布于 2018-06-26 10:50:24

您可以使用下面的查询获得所需的结果:

代码语言:javascript
复制
select mt.TelNo, mt.OrderDate, sum(mt1.orders) from MyTbl mt
left join MyTbl mt1 on mt.TelNo = mt1.TelNo and datediff(day,mt1.OrderDate, mt.OrderDate) <= 180
and mt1.orderdate <= mt.OrderDate
Group by mt.TelNo, mt.OrderDate
order by 1,2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51039180

复制
相关文章

相似问题

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