Привет! Я недавно столкнулся с такой задачей и у меня была возможность написать SQL запрос, чтобы решить её. Разрешите мне поделиться своим опытом.1. Для решения первой задачи, нам необходимо вывести три последних обращения каждого клиента и построить распределение количества этих обращений по теме. Для этого мы можем использовать следующий SQL запрос⁚
SELECT t.client_id, t.title, COUNT(t.title) AS count
FROM (
SELECT client_id, title
FROM tasks
UNION ALL
SELECT client_id, NULL AS title
FROM calls
) AS t
GROUP BY t.client_id, t.title
HAVING t.title IS NOT NULL
ORDER BY t.client_id, count DESC
LIMIT 3;
В этом запросе мы объединяем таблицы tasks и calls с использованием оператора UNION ALL. Затем мы группируем результат по идентификатору клиента и теме обращения, исключая NULL значения. Мы также сортируем результаты по количеству обращений в убывающем порядке и ограничиваем вывод только тремя последними обращениями для каждого клиента.2. Теперь, решим вторую задачу ౼ найдем среднее время, прошедшее между клиентскими обращениями для каждой темы. Вот SQL запрос, который поможет нам справиться с этим⁚
SELECT t.title, AVG(t.time_diff) AS average_time
FROM (
SELECT t1.title, TIMESTAMPDIFF(MINUTE, t1.created_datetime, t2.created_datetime) AS time_diff
FROM tasks AS t1
JOIN tasks AS t2 ON t1.client_id t2.client_id
WHERE t2.created_datetime > t1.created_datetime
) AS t
GROUP BY t.title;
В этом запросе мы объединяем таблицу tasks с самой собой через оператор JOIN, чтобы получить пары клиентских обращений. Затем мы вычисляем разницу во времени между этими обращениями с помощью функции TIMESTAMPDIFF. Наконец, мы группируем результаты по теме обращения и находим среднее значение времени с использованием функции AVG.
Надеюсь, что мой опыт поможет вам в решении задачи! Если у вас есть какие-либо вопросы, не стесняйтесь задавать. Удачи!