Преобразование функции доступа Last () в SQL-запрос - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь преобразовать эту функцию доступа в эквивалент SQL.

Last([Delivery Table].[Advice Number]) AS [LastOfAdvice Number]

Так как последняя функция не существует в SQL, я сделал это:

(SELECT TOP 1 [Delivery Table].[Advice Number] FROM
    (
    SELECT [Delivery Table].[Advice Number]   
    FROM [Delivery Table] ORDER BY [Delivery Table].[Advice Number] DESC
    ) AS [Advice Number Sorted]
) AS [LastOfAdvice Number]

Я получил вышеуказанное решение от: преобразовать функцию ms-access last () в sql server 2008

Однако я получаю это сообщение об ошибке:

Msg 1033, Level 15, State 1, Line 137
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.

Это сбивает с толку, потому что я уже указал TOP выше. Есть идеи?

Edit: Это изображение показывает функцию, используемую при доступе. Access Function

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Обычно вы можете заменить Первый или Последний другой функцией агрегирования, такой как Мин или Макс - с чуть большим значением:

Max([Delivery Table].[Advice Number]) AS [LastOfAdvice Number]
0 голосов
/ 23 января 2019

Вам не нужно использовать subquery только предложение TOP достаточно для доступа к последней записи таблицы [Delivery Table]:

SELECT TOP (1) dt.[Advice Number]   
FROM [Delivery Table] AS dt
ORDER BY dt.[Advice Number] DESC;

Однако, когда вы задаете предложение order by в подзапросе, вы должны иметь предложение top внутри subquery.

...