将访问Last()函数转换为SQL查询

时间:2019-01-23 10:51:53

标签: sql-server tsql ms-access database-migration

我正在尝试以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]

我从convert ms-access last() function to 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。 有任何想法吗?

编辑: 此图显示了访问中使用的功能。 Access Function

2 个答案:

答案 0 :(得分:2)

仅使用subquery子句就足以访问TOP表的最后一条记录:

[Delivery Table]

但是,当您在子查询中指定SELECT TOP (1) dt.[Advice Number] FROM [Delivery Table] AS dt ORDER BY dt.[Advice Number] DESC; 子句时,您应该在order by中包含top子句。

答案 1 :(得分:0)

您通常可以将 First Last 替换为另一个汇总功能,例如 Min Max -更多含义:

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