Sql 返回多条记录的最后\u值

Sql 返回多条记录的最后\u值,sql,sql-server,performance,sql-server-2016,Sql,Sql Server,Performance,Sql Server 2016,我有一个表sroequiry,如下快照所示: Data.jpg 我使用Last_值来获取表中每个StudentNumberstudent的最后一个条目。以学生编号“Y1293926”为例 脚本如下: SELECT DISTINCT(StudentNumber), LAST_VALUE(Arrears) OVER (PARTITION BY StudentNumber ORDER BY RecordID) AS LastValue FROM SROEnquiry

我有一个表sroequiry,如下快照所示: Data.jpg

我使用Last_值来获取表中每个StudentNumberstudent的最后一个条目。以学生编号“Y1293926”为例

脚本如下:

SELECT DISTINCT(StudentNumber),
       LAST_VALUE(Arrears) OVER 
       (PARTITION BY StudentNumber ORDER BY RecordID) AS LastValue  
FROM SROEnquiry 
WHERE StudentNumber = 'Y1293926'
结果如下:

SELECT DISTINCT(StudentNumber),
       LAST_VALUE(Arrears) OVER 
       (PARTITION BY StudentNumber ORDER BY RecordID) AS LastValue  
FROM SROEnquiry 
WHERE StudentNumber = 'Y1293926'
预期结果是:

StudentNumber   LastValue
Y1293926        0.00
脚本返回4个值而不是一个值有什么问题?

LAST VALUE返回OVER子句创建的窗口的最后一个值。当记录按RecordID排序时,窗口会展开,因此每次最后一个值都会获取不同的值

另外,DISTINCT应用于SELECT子句的两个字段。因此,对于最后一个值返回的每个值,您都会得到一条记录

为什么不直接使用:

SELECT TOP 1 StudentNumber, Arrears AS LastValue  
FROM SROEnquiry 
WHERE StudentNumber = 'Y1293926'
ORDER BY RecordID DESC
LAST VALUE返回OVER子句创建的窗口的最后一个值。当记录按RecordID排序时,窗口会展开,因此每次最后一个值都会获取不同的值

另外,DISTINCT应用于SELECT子句的两个字段。因此,对于最后一个值返回的每个值,您都会得到一条记录

为什么不直接使用:

SELECT TOP 1 StudentNumber, Arrears AS LastValue  
FROM SROEnquiry 
WHERE StudentNumber = 'Y1293926'
ORDER BY RecordID DESC

您需要使用最后一个_值指定正确的帧:


您需要使用最后一个_值指定正确的帧:


这将返回NULL,对吗?即使他想要的答案是0.00Title SQL Server 2016。。。顺便问一下,你是如何得到它的?在OP中提供的示例数据中不包括RecordID。因此我只是猜测,RecordID DESC的顺序会导致返回最后一条记录。@TimBiegeleisen是的,它确实是一条很好的记录!我昨天给出了一个很好的答案,也许正因为如此。这将返回空值,对吗?即使他想要的答案是0.00Title SQL Server 2016。。。顺便问一下,你是如何得到它的?在OP中提供的示例数据中不包括RecordID。因此我只是猜测,RecordID DESC的顺序会导致返回最后一条记录。@TimBiegeleisen是的,它确实是一条很好的记录!我昨天回答得很好,可能是因为这个原因。您的代码可能可以工作,但请包括一些说明,以解释为什么它与问题中的查询完全相同。OP的问题是,由于order by RecordId列,所以我只是更改了一条记录。您的代码可能可以工作,但请包括一些说明,以解释为什么它与问题中的查询完全相同查询如问题中所示。OP的问题是由于order by RecordId列的原因,得到的是四条记录而不是一条,所以我只做了更改..很好的一个Tim,这应该标记为一个答案。这里有一些关于额外语法的解释:很好,Tim,这应该被标记为一个答案。关于额外语法的一些解释如下: