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

Откриване на интервали на аномалия с SQL

Това трябва да е един от най-трудните въпроси, които съм виждал днес - благодаря! Предполагам, че можете да използвате CTE? Ако е така, опитайте нещо подобно:

;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 . Не добавих интервалите, но си представям, че можете да се справите с тази част от тук.

Успех.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какъв е еквивалентът на bigint в C#?

  2. Пакет за настройка на Spotlight Basic:Най-добрият безплатен инструмент за оптимизиране на SQL

  3. Разлика между числови, плаващи и десетични числа в SQL Server

  4. Връщане на стойност от команда на SQL Server Insert с помощта на c#

  5. Как да изберете данни на таблица от друга база данни в SQL Server?