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

Другие вопросы по тегам