Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 从一系列事务中获取最新状态_Sql Server_Tsql_Sql Server 2016 - Fatal编程技术网

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)进行分组。然后我将获得每个帐户的最终状态。。。