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

Mysql Beregn tidsforskel mellem tidsstempler i samme felt?

Du kan selv deltage i bordet, noget som dette virker i dit tilfælde:

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

Men det kan blive grimt, når du har huller i din ID-kolonne. Og især kan det blive grimt (i forhold til ydeevne (når man ikke har gode indekser på bordet)), når man har *masser af data.

Så jeg vil foreslå at bruge lidt mere avancerede forespørgsler ved hjælp af variabler. Uden behov for at slutte bordet til sig selv, kører dette typisk ret hurtigt:

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

At forbedre denne forespørgsel yderligere til at vise de to rækker, hvor tidsforskellen er for stor, burde ikke være et problem :) Når du kommer i alvorlige problemer, er du velkommen til at spørge.




  1. Sådan opretter du forbindelse til Oracle ved hjælp af JRuby &JDBC

  2. Sådan tillader du fuldtekstsøgning med bindestreger i søgeforespørgslen

  3. Pivotering af rækker til kolonner dynamisk i Oracle

  4. tilføjer 30 minutter til datetime php/mysql