是否可以使用SQL函数select
[MyVal_Last] = FIRST_VALUE([MyValue]) OVER (PARTITION BY [Category] ORDER BY [MyValue] DESC)
from tbl
获取排序变量的最后一个值?这是获取最后一个值的方法。
or
是否可以修改它以获得倒数第二个值?
更新。我熟悉获取最后一个但提到的一个值的不同方法,即here这些答案已经过时并且长了很长的胡须。我想知道新版本的SQL Server是否可以使用新功能以更优雅的方式完成它。
答案 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)