Sql-Server
使用更新方法根據時間戳查找最後一個(最大值)值
我的任務是根據時間戳(日期時間)值的最後一個(最大值)查找整數值。
因為它是如此復雜的查詢,所以我正在考慮這種方式來找到類似這樣的最後一個值
虛擬碼:
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 或更高版本中:
with my_data_cte ( select row_number() over (order by timestamp desc) as sequence, pk_vv from ( select timestamp, pk_v from tb1 union all select timestamp, pk_v from tb2 ) ) update my_table set value = pk_v from my_table mt inner join my_data_cte ct on mt.pk_v = mt.pk_v where sequence = 1