sql >> Databasteknik >  >> RDS >> Mysql

Mysql Beräkna tidsskillnaden mellan tidsstämplar i samma fält?

Du kan själv gå med i bordet, något sånt här fungerar i ditt fall:

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

Men det här kan bli fult när du har luckor i din ID-kolumn. Och speciellt kan det bli fult (prestandamässigt (när man inte har bra index på bordet)) när man har *massor av data.

Så jag skulle föreslå att du använder lite mer avancerade frågor med variabler. Utan att behöva ansluta bordet till sig självt går detta vanligtvis ganska snabbt:

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

Att ytterligare förbättra denna fråga för att visa de två raderna där tidsskillnaden är för stor borde inte vara ett problem :) När du hamnar i allvarliga problem, fråga gärna.




  1. Hamming avstånd på binära strängar i SQL

  2. Kan inte installera mysql2 gem på macOS Sierra

  3. Hur man analyserar tid från databasen

  4. .NET MySqlCommand @ platshållare kom i konflikt med MySQL-variabeln