sql >> Base de Datos >  >> RDS >> Mysql

Resultados de agrupación de MySQL por períodos de tiempo

Con poca información en sus tablas, esto no es más que una idea básica para usted, pero podría hacer algo como esto:-

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)

Obtenga todas las marcas de tiempo y únalas con todas las demás marcas de tiempo que sean mayores, y use MIN para reducirlo a la siguiente marca de tiempo más grande. Luego, a partir de eso, seleccione el conteo donde la diferencia es inferior a 600 segundos (suponiendo marcas de tiempo de Unix).

EDITAR:si desea atar la cantidad de intervalos de más de 10 minutos en los eventos para los usuarios, entonces:-

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)