Я надеюсь прояснить поведение функции плотного ранга при работе с соединениями. Ранее я получил отличное решение от моего поста Требуется рекурсивная помощь SQL Server cte При рассмотрении решения, которое включает использование плотного ранга и внутреннего соединения для разделения данных с разрывами в отсутствующих точках данных.
Итак: Исходя из того, как я читаю решение, во внутреннем соединении плотный ранг включает в свои ранжирующие строки, которые находятся слева, но не справа. Я настроил небольшой тест этого, и я не могу воспроизвести это поведение. Например, когда я запускаю запрос и использую базовый оператор выбора для cte, не разбивая его снова, как в исходном запросе, и точка данных за 1/5/12, A отсутствует, я получаю:
TradeDate Symbol Clse DenseRank RowNumber
2012-01-03 A 36.48 1 1
2012-01-04 A 36.19 2 2
2012-01-06 A 37.40 4 3
Исходя из моего текущего понимания, приведенное выше значение плотного ранга просто увеличилось бы с 2 до 3 в двух последних записях, поскольку объединение не возвращает совпадение для даты в tblDailyPricingAndVol. Заранее спасибо.