Sql server 从一系列事务中获取最新状态
我在黑暗中寻找这里。我甚至不确定我的想法是否真的存在 我有一个基于事务的数据库,其中包含对记录的一系列更新。每行包含对一个或多个列的更新。有没有办法获得整个记录的最终状态。例如:Sql server 从一系列事务中获取最新状态,sql-server,tsql,sql-server-2016,Sql Server,Tsql,Sql Server 2016,我在黑暗中寻找这里。我甚至不确定我的想法是否真的存在 我有一个基于事务的数据库,其中包含对记录的一系列更新。每行包含对一个或多个列的更新。有没有办法获得整个记录的最终状态。例如: +-----------+---------+---------+--------+---------+ | update_id | country | status | amount | device | +-----------+---------+---------+--------+---------+ |
+-----------+---------+---------+--------+---------+
| update_id | country | status | amount | device |
+-----------+---------+---------+--------+---------+
| 1 | UK | valid | 100 | iPhone |
| 2 | | invalid | | |
| 3 | | | 200 | Android |
| 4 | DE | | 300 | |
| 5 | | valid | | Android |
| 6 | | | 50 | |
| 7 | FR | | 350 | |
| 8 | | | | iPhone |
+-----------+---------+---------+--------+---------+
这里的最后一个状态是:
FR | valid | 350 | iPhone
有没有一种方法可以在一个查询或其他方法中获得(但对于数百万个唯一记录和数百个列而言)
目前,我能想到的唯一方法是使用游标并更新最终状态表,但这需要很长时间。您可以使用子查询,但必须为每列编写一个子查询:
declare @tmp table (update_id int,
country varchar(2),
status varchar(10),
amount int,
device varchar(20))
insert into @tmp values
(1 , 'UK' , 'valid' , 100 , 'iPhone' )
,(2 , null , 'invalid' , null , null )
,(3 , null , null , 200 , 'Android')
,(4 , 'DE' , null , 300 , null )
,(5 , null , 'valid' , null , 'Android')
,(6 , null , null , 50 , null )
,(7 , 'FR' , null , 350 , null )
,(8 , null , null , null , 'iPhone' )
select
(select top 1 country from @tmp where country is not null order by update_id desc) as country,
(select top 1 status from @tmp where status is not null order by update_id desc) as status,
(select top 1 amount from @tmp where amount is not null order by update_id desc) as amount,
(select top 1 device from @tmp where device is not null order by update_id desc) as device
结果:
否则,您可以使用SQL Server元数据中的所有列生成动态TSQL语句。您使用的是哪个版本的SQL Server?SQL Server 2016,但可以升级到2017。谢谢您的支持。是否有代码可以执行相同的操作,但通过另一列(如account_id)进行分组。然后我将获得每个帐户的最终状态。。。