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

Mysql Zeitunterschied zwischen Zeitstempeln im selben Feld berechnen?

Sie können dem Tisch selbst beitreten, so etwas funktioniert in Ihrem Fall:

SELECT 
*
FROM
yourTable a
INNER JOIN yourTable b ON a.ID = b.ID + 1
WHERE TIMESTAMPDIFF(second, a.timestamp, b.timestamp) > 60

Aber das kann hässlich werden, wenn Sie Lücken in Ihrer ID-Spalte haben. Und besonders kann es hässlich werden (in Bezug auf die Leistung (wenn Sie keine guten Indizes auf dem Tisch haben)), wenn Sie *viele haben von Daten.

Daher würde ich vorschlagen, etwas fortgeschrittenere Abfragen mit Variablen zu verwenden. Ohne die Notwendigkeit, den Tisch mit sich selbst zu verknüpfen, läuft dies normalerweise ziemlich schnell ab:

SELECT * FROM (
SELECT
yt.*,
TIMESTAMPDIFF(second, @prevTS, `timestamp`) AS timedifference,
@prevTS:=yt.`timestamp`
FROM
yourTable yt
, (SELECT @prevTS:=(SELECT MIN(`timestamp`) FROM yourTable)) vars
ORDER BY ID
)subquery_alias
WHERE timedifference > 65

Diese Abfrage weiter zu verbessern, um die beiden Zeilen anzuzeigen, in denen die Zeitdifferenz zu groß ist, sollte kein Problem sein :) Wenn Sie in ernsthafte Schwierigkeiten geraten, können Sie jedoch gerne fragen.