FIRST() 和 LAST() 的 SQL Server 2012 版本是什么?

moh*_*050 10 sql-server t-sql sql-server-2012

我有一个带value列的表。我想计算最后一行减去第一行,如下所示:

 id      value
  1       10
  2       45
  3       65
  4       95
  .       .
  .       .
  .       .
 500     200
Run Code Online (Sandbox Code Playgroud)

我想获得 200 - 10 = 190

我试着然而,在SQL Server 2012中使用下面的命令,LAST并且FIRST不工作。

SELECT LAST(Value) - FIRST(Value) FROM Counter;
Run Code Online (Sandbox Code Playgroud)

SQL Server 中此命令的语法是什么?

Aar*_*and 21

你接近-FIRST并且LAST是从Access; 在 SQL Server(从 SQL Server 2012 开始)中,它们是FIRST_VALUE()LAST_VALUE()

因此,如果您使用的是 2012 或更高版本(或 Azure SQL 数据库),则可以通过以下方法获得答案:

CREATE TABLE #fl
(
  IdentityColumn INT IDENTITY, 
  Value INT
);

INSERT #fl(Value) SELECT 10;
INSERT #fl(Value) SELECT 45;
INSERT #fl(Value) SELECT 65;
INSERT #fl(Value) SELECT 95;
INSERT #fl(Value) SELECT 200;

SELECT TOP (1) LAST_VALUE(Value) OVER (ORDER BY IdentityColumn)
            - FIRST_VALUE(Value) OVER (ORDER BY IdentityColumn)
  FROM #fl
  ORDER BY IdentityColumn DESC;

GO
DROP TABLE #fl;
Run Code Online (Sandbox Code Playgroud)


ype*_*eᵀᴹ 10

另一种方式(也适用于旧版本):

SELECT 
    result = (SELECT TOP (1) value FROM counter ORDER BY id DESC)
             - (SELECT TOP (1) value FROM counter ORDER BY id ASC) ;
Run Code Online (Sandbox Code Playgroud)