Я конвертирую некоторый код из Oracle в SQL Server (2012) и столкнулся с проблемой, когда этот подзапрос использует PARTITION/ORDER BY для извлечения самой последней записи , Подзапрос прекрасно работает сам по себе, но, как это подзапрос, я получаю сообщение об ошибке:Найти самую последнюю запись в подзапросе (SQL Server)
SQL Server Database Error: The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.
Вот часть SQL:
FROM (
SELECT distinct enr.MemberNum,
(ISNULL(enr.MemberFirstName, '') + ' ' + ISNULL(enr.MemberLastName, '')) AS MEMBER_NAME,
enr.MemberBirthDate as DOB,
enr.MemberGender as Gender,
LAST_VALUE(enr.MemberCurrentAge) OVER (PARTITION BY MemberNum ORDER BY StaticDate ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS AGE,
LAST_VALUE(enr.EligStateAidCategory)OVER (PARTITION BY MemberNum ORDER BY StaticDate ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS EligStateAidCategory,
LAST_VALUE(enr.EligStateAidCategory)OVER (PARTITION BY MemberNum ORDER BY StaticDate ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS AID_CAT_ROLL_UP,
LAST_VALUE(enr.EligFinanceAidCategoryRollup)OVER (PARTITION BY MemberNum ORDER BY StaticDate ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS EligFinanceAidCategoryRollup,
SUM(enr.MemberMonth) OVER (PARTITION BY MemberNum) AS TOTAL_MEMBER_MONTHS
FROM dv_Enrollment enr
WHERE enr.StaticDate BETWEEN '01-JUN-2016' AND '30-JUN-2016'
)A
Итак, я посмотрел вокруг и обнаружил, что вы можете использовать TOP (2147483647) хак, так что я попытался изменить первую строку:
SELECT distinct TOP (2147483647) enr.MemberNum,
Но я все еще получаю ту же ошибку. Все другие способы, о которых я думал, также требуют ORDER BY (с использованием DENSE RANK и т. Д.).
Я не вижу в заказе 'order by'. можете ли вы опубликовать полный текст запроса? –
вам не хватает H в 'wHere' – SqlZim
будьте осторожны с' between' [Плохие привычки к удару: неверная обработка даты/диапазона запросов - Aaron Bertrand - 2009-10-16] (http://sqlblog.com/ блоги/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx) – SqlZim