Мне было интересно, как лучше всего найти, если за любой непрерывный период в 20 дней количество событий превысило 10.
Я пытаюсь написать отчет об исключении, но не могу понять логику, кроме использования цикла.
Я включил схему для таблицы.
ID |StartDate |EndDate |Area
---------+---------+---------+---------
12 |01-02-2013 |05-02-2013 |A12
14 |06-02-2013 |12-02-2013 |A13
15 |11-02-2013 |19-02-2013 |A14
19 |16-02-2013 |26-02-2013 |A15
21 |21-02-2013 |05-03-2013 |A16
24 |01-02-2013 |05-02-2013 |A17
26 |06-02-2013 |12-02-2013 |A18
28 |11-02-2013 |19-02-2013 |A19
30 |16-02-2013 |26-02-2013 |A20
33 |21-02-2013 |05-03-2013 |A21
У меня есть частичное решение: '
'DECLARE @START AS DATE
DECLARE @END AS DATE
SET @START= '20130201'
SET @END= '20130204'
SELECT n.EVENT_DATE,
(SELECT SUM(SESSIONS) AS Total_Sessionsn
FROM dbo.[Session]
WHERE (EVENT_DATE BETWEEN DATEADD(d,-20,n.EVENT_DATE) AND n.EVENT_DATE)
GROUP BY AREA_CODE, SITE_CODE) AS Sessions
FROM [dbo].[Session] AS n
WHERE EVENT_DATE BETWEEN @START
AND DATEADD(d,20+dbo.HolidayCount(@END,DATEADD(d,20,@END)) ,@END )'
Понятно. Для всех, кто заинтересован в поиске даты через 20 рабочих дней, я добавил решение ниже. :) (Я чувствую себя глупо!)
/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP 1 [SK_CAL]
,[CAL_DATE]
,[CAL_CODE]
,[CAL_VALUE]
,[CAL_OPEN]
,[CAL_CLOSE]
FROM
(SELECT TOP 20 [SK_CAL]
,[CAL_DATE]
,[CAL_CODE]
,[CAL_VALUE]
,[CAL_OPEN]
,[CAL_CLOSE]
FROM [tempdb].[dbo].[tbCalendar]
WHERE (CAL_DATE>'20130201' AND CAL_VALUE=1)
ORDER BY SK_CAL ASC) n
ORDER BY SK_CAL DESC