sql >> Database >  >> RDS >> Sqlserver

Vind ontbrekende tijdsintervallen in een tabel

Het volgende zou moeten werken en retourneert niet slechts één record voor een apparaat-id.

De kern hiervan is om

  • Voeg een rijnummer toe aan elke record, geordend op Date en herstarten voor elke DeviceID .
  • Voeg samen met zichzelf om een ​​resultaat te creëren met rijen die bestaan ​​uit de combinatie van twee originele rijen. De relatie tussen de kolommen van elke rij is het rijnummer (+1) en de DeviceID .
  • Bewaar alleen die rijen waar de gerelateerde Date is meer dan 15 minuten.

SQL-verklaring

;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. Leg dit patroon van geheugengebruik uit in Amazon RDS/Mysql?

  2. Eerste werkdag van de huidige maand - SQL Server

  3. Percona/MySQL zonder toezicht installeren op Ubuntu

  4. JQUERY &php post error 500 (interne serverfout)