sql >> Databáze >  >> RDS >> Sqlserver

Najděte chybějící časové intervaly v tabulce

Následující by mělo fungovat a nevrací pouze jeden záznam pro ID zařízení.

Podstatou toho je

  • Ke každému záznamu přidejte číslo řádku seřazené podle Date a restartování pro každé DeviceID .
  • Připojte se k sobě a vytvořte výsledek s řádky sestávajícími z kombinace dvou původních řádků. Vztah mezi sloupci každého řádku je číslo řádku (+1) a DeviceID .
  • Zachovejte pouze ty řádky, kde je související Date je více než 15 minut.

Příkaz SQL

;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        

Testovací skript

;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. PLS-00201:Musí být deklarován identifikátor UTIL_FILE

  2. Aktualizace celočíselného sloupce z člena jsonb se nezdaří s:sloupec je typu integer, ale výraz je typu jsonb

  3. vypočítat hodiny na základě pracovní doby v Oracle SQL

  4. Můžeme provádět SQL dotazy v JQuery