Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Phát hiện khoảng thời gian bất thường bằng SQL

Đây hẳn là một trong những câu hỏi khó mà tôi đã thấy hôm nay - cảm ơn! Tôi giả sử bạn có thể sử dụng CTE? Nếu vậy, hãy thử một cái gì đó như sau:

;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

Fiddle . Tôi không thêm các khoảng, nhưng tôi tưởng tượng bạn có thể xử lý phần đó từ đây.

Chúc các bạn thành công.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pivots có cột động trong SQL Server

  2. Nối nhiều bảng trong SQL

  3. Sự khác biệt giữa khóa duy nhất với ràng buộc 'không null' và khóa chính là gì?

  4. Làm cách nào để chèn một bản ghi chỉ có các giá trị mặc định?

  5. Tìm cột phân vùng cho một bảng phân vùng trong SQL Server (T-SQL)