SQL确定员工是否回答了客户问题

时间:2018-08-29 21:43:53

标签: sql sql-server lag lead

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

情况:

  • 该问题已立即解决。因此得分为正。
  • 另一名员工已经尝试修复,但失败了。为了这 员工仍然指望他立即修复它。
  • 员工已返回客户并解决问题。自从他失败之前就没有得分。
  • 员工拜访了客户,但是同事不得不拜访最终解决。因此没有分数。

数据集看起来像这样,我伪造了结果:

LiveData

我需要计算最后一列。根据7天或以上的客户,员工和日期差异。任何人如何解决这个问题的线索? 一直在尝试使用超前和滞后,但是由于访问量未知,因此失败。

谢谢!

1 个答案:

答案 0 :(得分: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。然后,它检查以确保同一位员工之前没有失败。我相信这涵盖了您的所有条件。