Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL获取给定组的最后一个值_Sql Server_Tsql - Fatal编程技术网

Sql server T-SQL获取给定组的最后一个值

Sql server T-SQL获取给定组的最后一个值,sql-server,tsql,Sql Server,Tsql,我试图获取一组值(分区)中的最后一个值,但遇到了一点小麻烦。在下面的示例中,您可以看到我正在使用的示例数据集。MAX()将不起作用,因为“最后一个”是分区中最后一个日期(ID)的。我在下面的查询中注释掉了最后一个值,但这似乎也不起作用。。。不知道我做错了什么。我想要的是这样的结果数据集: 我将非常感谢任何帮助 也许对您的查询稍加修改即可: create table #Example (ID int, [Date] datetime, Rating tinyint) insert into #

我试图获取一组值(分区)中的最后一个值,但遇到了一点小麻烦。在下面的示例中,您可以看到我正在使用的示例数据集。MAX()将不起作用,因为“最后一个”是分区中最后一个日期(ID)的。我在下面的查询中注释掉了最后一个值,但这似乎也不起作用。。。不知道我做错了什么。我想要的是这样的结果数据集:


我将非常感谢任何帮助

也许对您的查询稍加修改即可:

create table #Example (ID int, [Date] datetime, Rating tinyint)

insert into #Example (ID, [Date], Rating)
values
    (5227,  '2021-01-11 19:21:39.107',  1)
    ,(128,  '2020-06-16 17:32:15.653',  5)
    ,(128,  '2020-06-23 11:35:16.570',  1)
    ,(2038, '2020-09-14 13:13:48.253',  2)
    ,(1268, '2020-07-30 16:05:07.950',  0)
    ,(2398, '2020-09-30 13:51:21.813',  5)
    ,(2058, '2020-09-14 13:13:48.253',  1)
    ,(3396, '2020-11-05 12:04:16.043',  5)
    ,(3396, '2020-12-07 13:23:05.357',  3)
    ,(3148, '2020-11-05 12:04:16.043',  1)
    ,(3399, '2020-11-06 12:04:16.043',  2)
    ,(3399, '2020-12-08 13:23:05.357',  4)

select
    exm.ID
    , exm.Date
    , exm.Rating
    , last_value(exm.Rating) over (partition by exm.id order by exm.date
                                          rows between current row and unbounded following) as [FinalRating]
from 
    #Example as exm
order by id, date

太棒了,这确实有效,谢谢!你能告诉我更多关于“当前行和无界后续行之间的行”的功能吗?网上有很多关于这方面的信息。但基本上在这个场景中,它拓宽了分区所看到的窗口。默认情况下(按照最初的方式),分区仅限于当前行。。。您还可以为窗口指定要向前(或向后)查看的行数。希望有帮助。如果没有,只要谷歌一下,你就会想出更好的解释。
create table #Example (ID int, [Date] datetime, Rating tinyint)

insert into #Example (ID, [Date], Rating)
values
    (5227,  '2021-01-11 19:21:39.107',  1)
    ,(128,  '2020-06-16 17:32:15.653',  5)
    ,(128,  '2020-06-23 11:35:16.570',  1)
    ,(2038, '2020-09-14 13:13:48.253',  2)
    ,(1268, '2020-07-30 16:05:07.950',  0)
    ,(2398, '2020-09-30 13:51:21.813',  5)
    ,(2058, '2020-09-14 13:13:48.253',  1)
    ,(3396, '2020-11-05 12:04:16.043',  5)
    ,(3396, '2020-12-07 13:23:05.357',  3)
    ,(3148, '2020-11-05 12:04:16.043',  1)
    ,(3399, '2020-11-06 12:04:16.043',  2)
    ,(3399, '2020-12-08 13:23:05.357',  4)

select
    exm.ID
    , exm.Date
    , exm.Rating
    , last_value(exm.Rating) over (partition by exm.id order by exm.date
                                          rows between current row and unbounded following) as [FinalRating]
from 
    #Example as exm
order by id, date