sql >> Database >  >> RDS >> Mysql

Mysql Tijdsverschil berekenen tussen tijdstempels in hetzelfde veld?

Je kunt zelf aan de tafel deelnemen, zoiets werkt in jouw geval:

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

Maar dit kan lelijk worden als je gaten in je ID-kolom hebt. En vooral het kan lelijk worden (in termen van prestaties (als je geen goede indexen op tafel hebt)) als je *lots hebt van gegevens.

Dus ik zou willen voorstellen om wat meer geavanceerde query's te gebruiken met behulp van variabelen. Zonder de noodzaak om de tafel op zichzelf te voegen, gaat dit meestal vrij snel:

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

Om deze zoekopdracht verder te verbeteren om de twee rijen weer te geven waar het tijdsverschil te groot is, zou geen probleem moeten zijn :) Als je in ernstige problemen komt, vraag het dan gerust.




  1. PostgreSQL:PostgreSQL-database verwijderen via de opdrachtregel

  2. HTML-reactie krijgen in plaats van JSON in Android

  3. MySQL Select en IF()-instructie

  4. Wat is de MS SQL Server-mogelijkheid vergelijkbaar met de MySQL FIELD()-functie?