SQL - OVER Предложение диапазон между 2 раза
Я пытаюсь использовать функцию over для подсчета количества событий, которые начинаются между начальной и конечной датой текущей строки для всех строк. Т.е. параллельный счетчик. В конечном итоге я буду искать максимальное количество одновременных событий в день или час и т. Д.
select FingerPrint
,StartDate
,EndDate
,Num_ConCurrent = count(FingerPrint) over (
partition by StartDate
order by StartDate
range between StartDate PRECEDING and EndDate following
)
from #File
group by FingerPrint
,StartDate
,Enddate
К сожалению, это не похоже на работу. Хотя я знаю, что мог бы просто использовать самосоединение, я подумал, что может быть альтернативный метод с предложением over.
Любая помощь высоко ценится.
NB: сообщение об ошибке
Сообщение 102, уровень 15, состояние 1, строка 7 Неверный синтаксис рядом с "StartDate".
1 ответ
Параметр Range в предложении over ищет целочисленное значение, а не ссылку на столбец. Возможно, есть способ сделать это с помощью предложения over, но я также не смог заставить его работать.
По моему опыту, самостоятельное присоединение к датам в диапазоне является очень медленным, и я не нашел правильный набор индексов, чтобы ускорить его. В этом случае я бы просто использовал встроенный подзапрос.
select FingerPrint,
StartDate,
EndDate,
(select count(FingerPrint)
from #File F2
where F2.StartDate between F.StartDate and F.EndDate
)
as Num_ConCurrent
)
from #File F
Проведены некоторые тесты с некоторыми данными о встречах, которые у меня есть, и 32000 строк встреч выполняются мгновенно, используя этот метод. Самостоятельное соединение длилось 15 секунд, прежде чем я остановил его.