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

Намерете липсващи времеви интервали в таблица

Следното трябва да работи и не връща само един запис за идентификатор на устройство.

Същността на това е да

  • Добавете номер на ред към всеки запис, подреден по Date и рестартиране за всеки DeviceID .
  • Присъединете се към себе си, за да създадете резултат с редове, състоящи се от комбинация от два оригинални реда. Връзката между колоните на всеки ред е номерът на реда (+1) и DeviceID .
  • Запазете само тези редове, където е свързаната Date е повече от 15 минути.

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        

Тестов скрипт

;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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Върнатият тип данни варира в зависимост от данните в таблицата

  2. SqlParameter вече се съдържа от друга колекция SqlParameterCollection - мами ли using() {}?

  3. Възможно ли е достъп до .mdf база данни без SQL Server?

  4. Как да сравня 2 реда от една и съща таблица (SQL Server)?

  5. Удостоверяване на SQL Server срещу удостоверяване на Windows:Кое да се използва и кога