Ваш вопрос хорошо сформулирован, но оставляет место для интерпретации. Это одна интерпретация:
SELECT avg(TIMESTAMPDIFF(SECOND, c.c_date, a.a_date) AS avg_time_to_response
FROM (
SELECT ref, min(date) AS c_date
FROM tbl
WHERE client > 0
GROUP BY 1
) c
JOIN (
SELECT ref, min(date) AS a_date
FROM tbl
WHERE admin > 0
GROUP BY 1
) a USING (ref)
WHERE a.a_date > c.c_date;
Предоставляет среднее время, которое проходит между первой публикацией клиента и первой публикацией администратора в каждой теме (номер ссылки на сообщение).
неотвеченные сообщения игнорируются. Потоки, начатые администраторами, будут путать результат с отрицательной продолжительностью, поэтому я исключил их. Только первое время отклика для каждого потока входит в результат. Дополнительные сообщения в той же теме здесь игнорируются.
Прочитайте руководство здесь о TIMESTAMPDIFF()
.
Спасибо @MrJ и @Vincent за указание на ошибку с вычитанием временных меток!
Относительно GROUP BY 1
Я цитирую руководство здесь :
Столбцы, выбранные для вывода, могут быть указаны в ORDER BY и GROUP.
Предложения BY с использованием имен столбцов, псевдонимов столбцов или позиций столбцов .
Позиции столбцов являются целыми числами и начинаются с 1:
Акцент мой. Поэтому я группирую по первому выбранному столбцу (ref
в обоих случаях). Просто обозначение ярлыка.