Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Gruppierungsergebnisse nach Zeiträumen

Mit wenigen Informationen auf Ihren Tabellen ist dies nicht mehr als eine Grundidee für Sie, aber Sie könnten so etwas tun:-

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)

Holen Sie sich alle Zeitstempel und verbinden Sie sie mit allen anderen Zeitstempeln, die größer sind, und verwenden Sie MIN, um dies auf den nächstgrößten Zeitstempel einzugrenzen. Wählen Sie dann die Anzahl aus, bei der die Differenz weniger als 600 Sekunden beträgt (unter der Annahme von Unix-Zeitstempeln).

BEARBEITEN - Wenn Sie die Anzahl der mehr als 10-minütigen Lücken in Ereignissen für Benutzer festlegen möchten, dann:-

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)