我的任务是根据时间戳(日期时间)值的最后一个(最大值)查找整数值。
因为它是如此复杂的查询,所以我正在考虑这种方式来找到类似这样的最后一个值
伪代码:
update my_table
set value=last_value
from my_table
inner join (
select *
from (
select top(100) percent
from
( select ts,last_value,pk_v from tb1
union all
select ts,last_value,pk_v from tb2
..
) as temp
order by ts
) as temp_order
) as temp on my_table.pk_v=temp.pk_v
这个想法是制作按时间戳排序的子查询,然后更新表。
在这种情况下,有时会在子查询中为一个 pk_val(primary_key 值)提供更多值。
对我来说,现在看起来这是不可能的,我正在考虑在 CURSOR 中进行更新。但在我继续之前,我很想听听你选择这个。
更清晰的问题是:在一个事务(选择)SQL 中更新如何工作需要两次更新同一行?
*编辑:1 * 这是带有数据的示例
create table #Table_To_update
(pk int not null,last_value int)
insert into #Table_To_update
select 1,null
union all
select 2,null
union all
select 3,null
create table #table_as_sub_query
(fk int, value int ,ts datetime)
insert into #table_as_sub_query
select 1,5,'2012-01-01'
union all
select 1,6,'2012-03-01'
union all
select 1,2,'2012-04-01'
union all
select 2,7,'2012-02-01'
union all
select 2,8,'2012-02-05'
union all
select 2,6,'2012-04-01'
union all
select 3,0,'2012-01-01'
union all
select 3,9,'2012-05-05'
union all
select 3,12,'2012-01-01'
/*--This Way I want to update new table with last values --*/
update #Table_To_update
set last_value=table2.value
from #Table_To_update table1
inner join (select
top(100) percent
*
from #table_as_sub_query
order by ts desc
) as table2 on table1.pk=table2.fk
你的问题不清楚。您正在尝试根据另一个表的值更新某个表的值?这可以使用以下查询来解决:
在 SQL Server 2005 或更高版本中: