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
Dla każdej wiadomości w t1 otrzymujemy odpowiednie odpowiedzi wysyłane po wiadomości t1 i grupujemy je, aby uzyskać minimalną datę odpowiedzi (data pierwszej odpowiedzi).
Umieść powyższe zaznaczenie w podzapytaniu i znajdź AVG dla response_date - msg_date
AKTUALIZACJAUżyłeś nieprawidłowej tabeli m2.*, którą zastąpiłem m1.* i wyniki są dostępne
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