一尘不染

sql计数/求和直到另一列中的特定日期的调用数

sql

我有显示客户来电的数据。我有客户编号,电话号码(1个客户可以有多个),每个语音呼叫的日期记录和呼叫持续时间的列。表看起来在下面的例子中。

CusID |  PhoneNum   |  Date             | Duration
20111    43576233   20.01.2016-14:00     00:10:12
20111    44498228   14.01.2016-15:30     00:05:12
20112    43898983   14.01.2016-15:30

我想要的是在应答之前(持续时间> 0)计算每个号码的呼叫尝试次数。这样我就可以估算出平均应该致电多少次才能联系到客户或电话号码。它基本上应该计算持续时间>
0的min(Date)之前每个电话号码的任何列。

SELECT Phone, Min(Date) FROM XX WHERE Duration IS NOT NULL GROUP BY Phone --

我认为这应该给我时间限制,直到我应该计算通话次数为止。我不知道如何完成剩余的工作


阅读 158

收藏
2021-05-30

共1个答案

一尘不染

您的第一步是有效的:

    SELECT
        CusID
        ,PhoneNum
        ,MIN(Date) AS MinDate
    FROM XX
    WHERE Duration IS NOT NULL
    GROUP BY CusID, PhoneNum

这样,您将获得每行一行,PhoneNum并包含第一个成功呼叫的日期。

现在,将此表加入原始表中,只保留具有先前日期的行(每个PhoneNum)。PhoneNum再次分组并计数。对于LEFT JOIN第一次尝试回答的数字,连接应该具有零计数的行。

WITH
CTE
AS
(
    SELECT
        CusID
        ,PhoneNum
        ,MIN(Date) AS MinDate
    FROM XX
    WHERE Duration IS NOT NULL
    GROUP BY CusID, PhoneNum
)
SELECT
    CusID
    ,PhoneNum
    ,COUNT(XX.PhoneNum) AS Count
FROM
    CTE
    LEFT JOIN XX
        ON  XX.PhoneNum = CTE.PhoneNum
        AND XX.Date < CTE.MinDate
GROUP BY CusID, PhoneNum
;

如果从未回答过任何数字,则该数字将完全不包含在结果集中。

2021-05-30