select t1.*, min(t2.msg_date) as response_date
from mytable t1 join mytable t2
on t1.msg_sender=t2.msg_receiver and t2.msg_sender=t1.msg_receiver and t2.msg_date>t1.msg_date
group by t1.msg_sender,t1.msg_receiver,t1.msg_date
Pour chaque message dans t1, nous obtenons les réponses correspondantes envoyées après le message t1 et les regroupons pour obtenir une date de réponse minimale (première date de réponse).
Placez la sélection ci-dessus dans une sous-requête et recherchez AVG of response_date - msg_date
MISE À JOURVous avez utilisé une table incorrecte m2.* J'ai remplacé par m1.* et les résultats sont là
SELECT
AVG(UNIX_TIMESTAMP(response_date) - UNIX_TIMESTAMP(msg_date)),
AVG(response_date - msg_date)
FROM
(SELECT
m1.*,
min(m2.msg_date) as response_date
FROM
edu_messages m1
JOIN
edu_messages m2 ON m1.msg_sender = m2.msg_receiver AND m2.msg_sender = m1.msg_receiver AND m2.msg_date > m1.msg_date
GROUP BY
m1.msg_sender,
m1.msg_receiver,
m1.msg_date) AS table1