【问题标题】:SQL determine whether a customer issue is answered by the employeeSQL 确定员工是否回答了客户问题
【发布时间】:2018-08-29 21:43:53
【问题描述】:

我正在寻找一种方法来确定员工是否直接为客户解决了问题。当员工需要在 7 天内返回时,问题没有解决。

情况:

  • 问题立即得到解决。因此得分为正。
  • 另一位员工已经尝试修复,但失败了。为了这 员工仍然认为他立即修复了它。
  • 员工已返回给客户并解决了问题。没有得分,因为他以前失败过。
  • 员工拜访了客户,但一位同事必须拜访才能最终修复。因此没有得分。

数据集是这样的,我伪造了结果:

Customer    Date        Employee    Outcome_Fixed
1           1-8-2018    1           1
2           2-8-2018    4           0
2           8-8-2018    3           0
2           11-8-2018   4           0
3           3-8-2018    8           0
3           5-8-2018    7           1
4           6-8-2018    3           1

我需要计算最后一列。基于 7 天内或超过 7 天的客户、员工和日期差异。任何人都知道如何解决这个问题? 一直在尝试使用领先和滞后,但由于访问量未知,因此失败。

谢谢!

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?

标签: sql sql-server lag lead


【解决方案1】:

CASE WHEN EXISTS 是一种方法:

SELECT Customer,
       [Date],
       Employee,
       CASE WHEN EXISTS (SELECT * 
                         FROM yourTable T2
                         WHERE T.[Date] < T2.[Date]
                         AND DATEDIFF(DAY, T.[Date], T2.[Date]) < 8
                         AND T.Customer = T2.Customer)
            THEN 0
            WHEN EXISTS (SELECT *
                         FROM yourTable T2
                         WHERE T.Employee = T2.Employee
                         AND T.Customer = T2.Customer
                         AND T.[Date] <> T2.[Date])
            THEN 0
            ELSE 1
       END Outcome_Fixed
FROM yourTable T

首先检查是否有人在接下来的 7 天内访问过同一客户。如果是0,否则1。然后它会检查以确保同一员工之前没有失败过。我相信这涵盖了您的所有条件。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2012-06-23
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多