首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按周分组调用- MSSQL

按周分组调用- MSSQL
EN

Stack Overflow用户
提问于 2016-03-05 22:19:15
回答 1查看 52关注 0票数 1

我有两个桌子A和B。

A保存出站呼叫的数据。(通话时间和电话号码)。

B保存入站呼叫的数据。(电话收到时间和电话号码)。

我必须显示数据的所有出站电话,从同一号码收到入站电话,在7天内,放置一个出站电话。如果我在7天内没有接到那个号码的电话,那就不应该考虑那个出站电话。例:我3月1日从'9999999999‘号打了一个出站电话,3月5日接到了同一个号码'9999999999’的入站电话。我必须在我的报告中显示这个电话。

另一种需要考虑的情况是:如果我在3月1日和3月3日等打了一个出外电话,那么我必须考虑在一个星期内只打第一个出站电话,从出站呼叫开始,只有当我在3月1日打了一个入站电话时,才能显示结果。

我表中的一个电话号码的数据如下:

表A:

电话号码\出站通话时间(以日期为单位)

9999999999 -2015年-12-23 xx:xx:xx

9999999999 -2015年-12-29 xx:xx:xx

9999999999 -2015年-12-30 xx:xx:xx

9999999999 - 2016-01-05 xx:xx:xx

9999999999 - 2016-01-06 xx:xx:xx

9999999999 - 2016-01-07 xx:xx:xx

9999999999 - 2016-01-07 xx:xx:xx

9999999999 -01-08 xx:xx:xx

9999999999 -01-19 xx:xx:xx

9999999999 -01-21 xx:xx:xx

9999999999 -01-22 xx:xx:xx

9999999999 -01-26 xx:xx:xx

9999999999 -01-28 xx:xx:xx

9999999999 -01-29 xx:xx:xx

9999999999 - 2016-02-02 xx:xx:xx

9999999999 - 2016-02-03 xx:xx:xx

9999999999 - 2016-02-04 xx:xx:xx

9999999999 - 2016-02-09 xx:xx:xx

9999999999 - 2016-02-11 xx:xx:xx

9999999999 - 2016-02-12 xx:xx:xx

表B:

电话号码:入站通话时间(以日期为单位)

9999999999 -01-08 xx:xx:xx

9999999999 -01-13 xx:xx:xx

9999999999 -01-19 xx:xx:xx

9999999999 -01-31 xx:xx:xx

9999999999 - 2016-02-11 xx:xx:xx

9999999999 - 2016-02-12 xx:xx:xx

我的产出应该是:

电话号码\出站呼叫时间_入站呼叫时间(以日期为单位)

9999999999 - 2016-01-05 xx:xx:xx 2016-01-08 xx:xx:xx

9999999999 -01-19 xx:xx:xx 2016-01-19 xx:xx:xx

9999999999 -01-26 xx:xx:xx 2016-01-31 xx:xx:xx

9999999999 - 2016-02-04 xx:xx:xx 2016-02-11 xx:xx:xx

我的问题是:

代码语言:javascript
复制
SELECT a.phonenumber, Min(a.outboundcall), Min(b.inboundcall)  
FROM TableA a  
join TableB b  
ON (a.phonenumber=b.phonenumber)  
WHERE (a.outboundcall < b.inboundcall)  
AND (DATEDIFF(MI, a.outboundcall,b.inboundcall) between 0 AND 10800)  
group by a.phonenumber,  
         DATEADD(WEEK, DATEDIFF(WEEK, '19000101', a.outboundcall)/7*7, '19000101'),  
         DATEADD(WEEK, DATEDIFF(WEEK, '19000101', b.inbouncall)/7*7, '19000101')  
ORDER BY 1,2,3

还应考虑时间问题。有人能帮我写一个关于这个的查询吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-05 22:42:31

代码语言:javascript
复制
SELECT a.phonenumber, FLOOR(DATEDIFF(day,PhStartDates.stDate,a.outboundcall)/7), 
FLOOR(DATEDIFF(day,PhStartDates.stDate,b.inboundcall)/7),    
MIN(a.outboundcall), MIN(b.inboundcall)
FROM TableA a  
join TableB b  
ON a.phonenumber=b.phonenumber
join (SELECT phonenumber, Min(outboundcall) as StDate
FROM TableA 
group by phonenumber) as PhStartDates
ON a.phonenumber=PhStartDates.phonenumber
WHERE (a.outboundcall < b.inboundcall)
AND FLOOR(DATEDIFF(day,PhStartDates.stDate,a.outboundcall)/7) = FLOOR(DATEDIFF(day,PhStartDates.stDate,b.inboundcall)/7);
GROUP BY a.phonenumber, FLOOR(DATEDIFF(day,PhStartDates.stDate,a.outboundcall)/7), FLOOR(DATEDIFF(day,PhStartDates.stDate,b.inboundcall)/7)
ORDER BY 1,4,5;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35820649

复制
相关文章

相似问题

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