В поставляемом запросе не используется оконная функция DENSE_RANK .Не будучи знакомым с вашей структурой данных, я полагаю, что ваш запрос пытается найти наибольшее значение Date для каждого идентификатора отрасли, да?Переписав вышеупомянутый запрос для использования функции ранжирования, я бы написал ее как общее табличное выражение.
;
WITH RANKED AS
(
SELECT
II.*
-- RANK would serve just as well in this scenario
, DENSE_RANK() OVER (PARTITION BY II.id ORDER BY II.Date desc) AS most_recent
FROM Industries II
WHERE
II.Date <= '22 June 2011'
)
, MOST_RECENT AS
(
-- This query restricts it to the most recent row by id
SELECT
R.*
FROM
RANKED R
WHERE
R.most_recent = 1
)
SELECT
*
FROM
MOST_RECENT MR
INNER JOIN
#ii_t i
ON i.id = MR.id
Кроме того, для решения вопроса производительности вам может понадобиться посмотреть на структуру отраслей.В этой таблице может отсутствовать индекс, и, если он есть, он может не охватывать поле Дата (по убыванию) и идентификатор.Чтобы повысить эффективность вышеупомянутого запроса, не тяните все назад в разделе RANKED.Я сделал это, так как не знал, какие поля вам понадобятся, но, очевидно, чем меньше вам придется отступать, тем эффективнее механизм извлечения данных.