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
Đối với mỗi tin nhắn trong t1, chúng tôi nhận được câu trả lời tương ứng được gửi sau tin nhắn t1 và nhóm chúng lại để có ngày trả lời tối thiểu (ngày trả lời đầu tiên).
Đặt lựa chọn ở trên trong một truy vấn con và tìm AVG của response_date - msg_date
CẬP NHẬT Bạn đã sử dụng bảng m2 không chính xác. * Tôi đã thay thế bằng m1. * Và kết quả ở đó
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