找到每个月未接听的电话,并且每个月都打过的客户数据
找出每个月未接听的电话,并且每个月都打过的客户数据
lines为通话表,ResultTypeID=20 为客户拒接,ResultTypeID<>20为客户接听,LineDate为通话时间,CustomerID为客户ID。
现在要求查询出来,每个客户最近三个月都拨打过,但客户拒接的数据,
如果2013-03,2013-04,2013-05都打过,例如:如果是2013-03,2013-04打过,但2013-05没有打过,不在此范围。
------解决方案--------------------
------解决方案--------------------
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)