sql >> Databáze >  >> RDS >> Mysql

Mysql Vypočítat časový rozdíl mezi časovými razítky ve stejném poli?

Ke stolu se můžete připojit sami, ve vašem případě funguje něco takového:

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

Ale to může být ošklivé, když máte ve sloupci ID mezery. A hlavně to může být ošklivé (z hlediska výkonu (když nemáte na stole dobré indexy)), když máte *spoustu dat.

Navrhoval bych tedy použít trochu pokročilejší dotazy pomocí proměnných. Bez nutnosti připojovat tabulku k sobě to obvykle běží docela rychle:

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

Další vylepšení tohoto dotazu tak, aby zobrazoval dva řádky, kde je časový rozdíl příliš velký, by neměl být problém :) Když se dostanete do vážných problémů, klidně se zeptejte.




  1. MySQL vybere název sloupce a hodnotu jako pole

  2. Najděte referenční entity na serveru SQL:sys.dm_sql_referenced_entities

  3. Konfigurace SSL pro konkrétní prostředí v souboru Laravel .env

  4. Převod IP na Long v MySQL