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

MySQL regroupe les résultats par périodes

Avec peu d'informations sur vos tables, ce n'est rien de plus qu'une idée de base pour vous, mais vous pourriez faire quelque chose comme ceci :-

SELECT COUNT(*)
FROM
(
    SELECT a.TimeStamp AS ThisTimeStamp, MIN(b.TimeStamp) AS NextTimeStamp
    FROM SomeTable a
    INNER JOIN SomeTable b
    ON a.TimeStamp < b.TimeStamp
    GROUP BY a.TimeStamp
) Sub1
WHERE Sub1.ThisTimeStamp < (Sub1.NextTimeStamp - 600)

Obtenez tous les horodatages et joignez-les à tous les autres horodatages supérieurs, et utilisez MIN pour réduire cela au plus grand horodatage suivant. Ensuite, à partir de cela, sélectionnez le nombre où la différence est inférieure à 600 secondes (en supposant des horodatages Unix).

EDIT - Si vous voulez que le nombre d'écarts de plus de 10 minutes dans les événements pour les utilisateurs soit lié :-

SELECT COUNT(*)
FROM
(
    SELECT a.user_id, a.TimeStamp AS ThisTimeStamp, MIN(b.TimeStamp) AS NextTimeStamp
    FROM SomeTable a
    INNER JOIN SomeTable b
    ON a.TimeStamp < b.TimeStamp
    AND a.user_id = b.user_id
    GROUP BY a.user_id, a.TimeStamp
) Sub1
WHERE Sub1.ThisTimeStamp < (Sub1.NextTimeStamp - 600)