使用SQL函数FIRST_VALUE获取最后一个值

时间:2017-11-14 10:32:19

标签: sql sql-server function sql-server-2016

是否可以使用SQL函数select [MyVal_Last] = FIRST_VALUE([MyValue]) OVER (PARTITION BY [Category] ORDER BY [MyValue] DESC) from tbl 获取排序变量的最后一个值?这是获取最后一个值的方法。

or

是否可以修改它以获得倒数第二个值?

更新。我熟悉获取最后一个但提到的一个值的不同方法,即here这些答案已经过时并且长了很长的胡须。我想知道新版本的SQL Server是否可以使用新功能以更优雅的方式完成它。

3 个答案:

答案 0 :(得分:5)

SELECT
  *
FROM
(
  SELECT
    *, 
    ROW_NUMBER() OVER (PARTITION BY [Category]
                           ORDER BY [MyValue] DESC)   AS ordinal
  FROM
    tbl
)
  ordered_tbl
WHERE
  ordinal = 2

答案 1 :(得分:2)

您也可以使用OFFSET FETCH函数获取倒数第二行。

CREATE TABLE Cinema
    ([CinemaID] int, [Name] varchar(7))
;

INSERT INTO Cinema
    ([CinemaID], [Name])
VALUES
    (1, 'Odeon'),
    (2, 'Mercury'),
    (3, 'Apollo'),
    (4, 'Venus')
;

 SELECT c.* 
    FROM dbo.Cinema AS c                    
    ORDER BY CinemaID DESC
    OFFSET 1 ROW
    FETCH FIRST 1 ROW ONLY ; 

答案 2 :(得分:0)

好的,我找到了。函数LAG在2017年完成了这项工作。我不知道它是否具有最高性能但是它非常好,因为简单性很重要。

[MyVal_Last] = LAG([MyValue],1) OVER (PARTITION BY [Category] ORDER BY [MyValue] ASC)