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