日期:2014-05-17  浏览次数:20618 次

找出每个月未接听的电话,并且每个月都打过的客户数据

 lines为通话表,ResultTypeID=20 为客户拒接,ResultTypeID<>20为客户接听,LineDate为通话时间,CustomerID为客户ID。
现在要求查询出来,每个客户最近三个月都拨打过,但客户拒接的数据,
如果2013-03,2013-04,2013-05都打过,例如:如果是2013-03,2013-04打过,但2013-05没有打过,不在此范围。


 select CustomerID,Convert(Varchar(7),lineDate,120) as yyyymm,
 sum(case when ResultTypeID=20 then 0 else 1 end) as 接通次数,COUNT(id) as 打过次数
 from lines where LineDate> DateAdd(Month,-3,getdate()) 
 group by CustomerID, Convert(Varchar(7),lineDate,120) 


------解决方案--------------------


DECLARE @LatestMonth Datetime 

-- 以现月为限
SET @LatestMonth = GETDATE()

-- 以上月为限 
-- SET @LatestMonth = DateAdd(Month,-1,GETDATE())

SELECT t.CustomerID, Convert(VARCHAR(7),t.lineDate,120) AS yyyymm,  SUM(CASE WHEN t.ResultTypeID=20 THEN 0 ELSE 1 END) AS 接通次数,  SUM(CASE WHEN t.ResultTypeID<>20 THEN 0 ELSE 1 END) AS 拒接次数, COUNT(t.CustomerID) AS 打过次数
FROM lines t WHERE Convert(VARCHAR(7),t.lineDate,120) BETWEEN CONVERT(VARCHAR(7), DateAdd(Month,-2,@LatestMonth) ,120) AND CONVERT(VARCHAR(7), @LatestMonth, 120)  
-- 第一个月有打过
AND EXISTS (SELECT CustomerID FROM lines WHERE CustomerID=t.CustomerID  AND Convert(VARCHAR(7),lineDate,120)=CONVERT(VARCHAR(7), DateAdd(Month,-2,@LatestMonth) ,120))
-- 第二个月有打过
AND EXISTS (SELECT CustomerID FROM lines WHERE CustomerID=t.CustomerID  AND Convert(VARCHAR(7),lineDate,120)=CONVERT(VARCHAR(7), DateAdd(Month,-1,@LatestMonth) ,120))
-- 第三个月有打过
AND EXISTS (SELECT CustomerID FROM lines WHERE CustomerID=t.CustomerID  AND Convert(VARCHAR(7),lineDate,120)=CONVERT(VARCHAR(7), @LatestMonth, 120)) 
GROUP BY t.CustomerID, Convert(VARCHAR(7),t.lineDate,120)


------解决方案--------------------

 select CustomerID,Convert(Varchar(7),lineDate,120) as yyyymm,
 sum(case when ResultTypeID=20 then 0 else 1 end) as 接通次数,COUNT(id) as 打过次数
 from lines where LineDate> DateAdd(Month,-3,getdate()) 
--新增同时满足的事条件:每个月都需要有拨打次数。总次数大于等于3次,注意:此处的3是个变量。
 AND DATEPART(mm,Linedate) = DATEPART(mm,getdate())
 AND DATEPART(mm,Linedate) = DATEPART(mm,getdate())-1
 AND DATEPART(mm,Linedate) = DATEPART(mm,getdate())-2
 AND COUNT(id)>=3
 group by CustomerID, Convert(Varchar(7),lineDate,120)