Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql Oblicz różnicę czasu między znacznikami czasu w tym samym polu?

Możesz dołączyć do stołu samodzielnie, w Twoim przypadku działa coś takiego:

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

Ale może to być brzydkie, gdy masz luki w kolumnie ID. A zwłaszcza może to być brzydkie (pod względem wydajności (gdy nie masz dobrych indeksów na stole)) kiedy masz *dużo danych.

Proponuję więc użyć nieco bardziej zaawansowanych zapytań wykorzystujących zmienne. Bez konieczności dołączania do stołu zwykle działa to dość szybko:

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

Aby jeszcze bardziej ulepszyć to zapytanie, aby wyświetlić dwa wiersze, w których różnica czasu jest zbyt duża, nie powinno stanowić problemu :) Jeśli jednak wpadniesz w poważne kłopoty, możesz zapytać.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Warunkowe ON DUPLICATE KEY UPDATE (Aktualizuj tylko wtedy, gdy spełniony jest określony warunek)

  2. Jak wyeksportować / zrzucić tabelę MySql do pliku tekstowego, w tym nazw pól (czyli nagłówków lub nazw kolumn)

  3. Używanie SQLAlchemy ORM dla klucza innego niż podstawowy, unikalny, automatycznie zwiększający się identyfikator

  4. undefined method podczas korzystania z form_for w metodzie New controller

  5. Przyznaj użytkownikowi uprawnienia do wyświetlania tylko widoku MySQL i niczego więcej