SQL определяет, ответил ли сотрудник на проблему клиента
Я ищу способ определить, исправил ли сотрудник проблему непосредственно для клиента. Когда сотруднику необходимо вернуться в течение 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 дней. Кто-нибудь знает, как решить эту проблему? Я пытался использовать лидерство и отставание, но так как количество посещений неизвестно, это терпит неудачу.
Спасибо!
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
, Затем выполняется проверка, чтобы убедиться, что тот же сотрудник не потерпел неудачу раньше. Я считаю, что охватывает все ваши условия.