Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql Изчислете ли времева разлика между времевите марки в едно и също поле?

Можете сами да се присъедините към масата, нещо подобно работи във вашия случай:

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

Но това може да стане грозно, когато имате пропуски в колоната за идентификация. И особено може да стане грозно (по отношение на производителността (когато нямате добри индекси на масата)), когато имате *много на данни.

Така че, бих предложил да използвате малко по-разширени заявки, използващи променливи. Без да е необходимо да присъединявате таблицата към себе си, това обикновено работи доста бързо:

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
  • вижте как работи на живо в sqlfiddle

За по-нататъшно подобряване на тази заявка за показване на двата реда, където разликата във времето е твърде голяма, не би трябвало да е проблем :) Когато попаднете в сериозни проблеми, не се колебайте да попитате.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL INSERT .... ПРИ ДУБЛИРАНЕ НА АКТУАЛИЗИРАНЕ - Добавя едно към автоматичното нарастване

  2. SQL/PHP:Показване на топ 3 най-продавани продукта от базата данни

  3. Премахнете крайните нули в десетичната стойност с промяна на дължината

  4. Съхранение на излишни външни ключове, за да се избегнат присъединявания

  5. MySQL Вмъкване в от една база данни в друга