Mysql
 sql >> Database >  >> RDS >> Mysql

Mysql Calcola la differenza di tempo tra i timestamp nello stesso campo?

Puoi unirti al tavolo da solo, qualcosa del genere funziona nel tuo caso:

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

Ma questo può diventare brutto quando hai delle lacune nella colonna ID. E soprattutto può diventare brutto (in termini di prestazioni (quando non hai buoni indici sul tavolo)) quando ne hai *molti di dati.

Quindi, suggerirei di utilizzare query un po 'più avanzate utilizzando le variabili. Senza la necessità di unire il tavolo a se stesso, questo in genere funziona abbastanza velocemente:

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

Per migliorare ulteriormente questa query per visualizzare le due righe in cui la differenza di tempo è troppo grande non dovrebbe essere un problema :) Quando ti trovi in ​​guai seri, sentiti libero di chiedere, però.