sql >> Database teknologi >  >> RDS >> Sqlserver

Find manglende tidsintervaller i en tabel

Følgende burde virke og returnerer ikke kun en enkelt post for et enheds-id.

Kernen i dette er at

  • Tilføj et rækkenummer til hver post, sorteret efter Date og genstart for hver DeviceID .
  • Slå sammen med dig selv for at skabe et resultat med rækker, der består af kombinationen af ​​to originale rækker. Relationen mellem kolonnerne i hver række er rækkenummeret (+1) og DeviceID .
  • Behold kun de rækker, hvor den relaterede Date er mere end 15 minutter.

SQL-erklæring

;WITH t AS ( SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY DeviceID ORDER BY Date) FROM TestTable ) SELECT t1.DeviceID, t1.Date, t2.Date FROM t t1 INNER JOIN t t2 ON t2.DeviceID = t1.DeviceID AND t2.rn = t1.rn + 1 WHERE DATEDIFF(MINUTE, t1.Date, t2.Date) > 15

Testscript

;WITH TestTable (ID, DeviceID, Date, Value) AS ( SELECT 1, 3, '2011-08-24 00:00:00', 0.51 UNION ALL SELECT 2, 3, '2011-08-24 00:15:00', 2.9 UNION ALL SELECT 3, 3, '2011-08-24 00:30:00', 0 UNION ALL SELECT 4, 3, '2011-08-24 00:45:00', 7.1 UNION ALL SELECT 5, 3, '2011-08-24 01:00:00', 1.05 UNION ALL SELECT 6, 3, '2011-08-24 03:15:00', 3.8 ) , t AS ( SELECT *, rn = ROW_NUMBER() OVER (PARTITION BY DeviceID ORDER BY Date) FROM TestTable ) SELECT t1.DeviceID, t1.Date, t2.Date FROM t t1 INNER JOIN t t2 ON t2.DeviceID = t1.DeviceID AND t2.rn = t1.rn + 1 WHERE DATEDIFF(MINUTE, t1.Date, t2.Date) > 15


  1. hvordan man indtaster ip i forespørgselslinket server

  2. mysql ft_min_word_len ændring på ubuntu virker ikke

  3. Få en tilfældig værdi fra et interval i MS SQL?

  4. Hvordan opretter man permanente filer på Heroku?