Mysql
 sql >> Base de données >  >> RDS >> Mysql

Vérifier le temps de réponse sur le message envoyé - possible en utilisant uniquement SQL ?

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