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
Untuk setiap pesan di t1 kami mendapatkan jawaban yang sesuai yang dikirim setelah pesan t1 dan mengelompokkannya untuk mendapatkan tanggal respons minimal (tanggal jawaban pertama).
Tempatkan pilihan di atas dalam subkueri dan temukan AVG dari response_date - msg_date
UPDATEAnda menggunakan tabel m2 yang salah.* Saya mengganti dengan m1.* dan hasilnya ada
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