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

Deteksi Interval Anomali dengan SQL

Ini pasti salah satu pertanyaan tersulit yang saya lihat hari ini - terima kasih! Saya berasumsi Anda dapat menggunakan CTE? Jika demikian, coba sesuatu seperti ini:

;WITH Filtered
AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY dateField) RN, dateField, Status
    FROM Test    
)
SELECT F1.RN, F3.MinRN,
    F1.dateField StartDate,
    F2.dateField Enddate
FROM Filtered      F1, Filtered F2, (
SELECT F1a.RN, MIN(F3a.RN) as MinRN
FROM Filtered      F1a
   JOIN Filtered F2a ON F1a.RN = F2a.RN+1 AND F1a.Status = 2 AND F2a.Status <> 2
   JOIN Filtered F3a ON F1a.RN < F3a.RN AND F3a.Status <> 2
GROUP BY F1a.RN ) F3 
WHERE F1.RN = F3.RN AND F2.RN = F3.MinRN

Dan Fiddle . Saya tidak menambahkan intervalnya, tapi saya rasa Anda bisa menangani bagian itu dari sini.

Semoga berhasil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah MS-SQL DAN/ATAU bersyarat (melakukan evaluasi hubung singkat)?

  2. Bagaimana menemukan tabel yang tidak digunakan di SQL Server

  3. Menggunakan Excel untuk membuat file CSV dengan karakter khusus dan kemudian Mengimpornya ke dalam db menggunakan SSIS

  4. Entity Framework 6 GUID sebagai kunci utama:Tidak dapat memasukkan nilai NULL ke kolom 'Id', kolom tabel 'FileStore' tidak mengizinkan nol

  5. Bagaimana cara mengimpor file .bak SQL Server ke MySQL?