Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Temukan interval waktu yang hilang dalam tabel

Mengikuti harus berfungsi dan tidak hanya mengembalikan satu catatan untuk deviceid.

Intinya adalah untuk

  • Tambahkan nomor baris ke setiap catatan, diurutkan berdasarkan Date dan memulai ulang untuk setiap DeviceID .
  • Gabung dengan self untuk membuat hasil dengan baris yang terdiri dari kombinasi dua baris asli. Relasi antara kolom setiap baris adalah rownumber (+1) dan DeviceID .
  • Hanya pertahankan baris dengan Date yang terkait lebih dari 15 menit.

Pernyataan 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        

Skrip uji

;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. Bagaimana kita bisa melihat tubuh prosedur tersimpan terenkripsi di SSMS?

  2. Bagaimana cara memperbarui Kolom Identitas di SQL Server?

  3. Haruskah saya menggunakan tipe data SQL_Variant?

  4. Sintaks salah di dekat ')' memanggil prosedur tersimpan dengan GETDATE

  5. Bagaimana saya bisa memasukkan lebih dari 8000 karakter dalam kolom VARCHAR(MAX) dengan ExecuteNonQuery?