2010-09-27 31 views
0

我遇到以下問題:我想用來自另一個表B的列「SOURCE_VALUE」中的值更新表A的列「UPDATE_VALUE」。兩個表都有一個時間戳列,並且應該在表A中被更新的值應爲表B中的行的具有最高時間戳越小一個/比表A.SQL:根據時間戳使用其他表中的值進行更新

的行的時間戳例如等於:

表B:

| ID |  TIMESTAM P  | SOURCE_VALUE | 
| 1 | 2010-09-23 00:00:00 |  VAL_1  | 
| 2 | 2010-09-24 12:30:00 |  VAL_2  | 
| 2 | 2010-09-24 04:50:00 |  VAL_3  | 
| 3 | 2010-09-25 12:00:00 |  VAL_4  | 
| 3 | 2010-09-25 12:20:00 |  VAL_5  | 
| 4 | 2010-09-26 01:50:00 |  VAL_6  | 
| 4 | 2010-09-26 02:00:00 |  VAL_7  | 
| 5 | 2010-09-27 14:00:00 |  VAL_8  | 
| 6 | 2010-09-28 22:00:00 |  VAL_9  | 

所以表A的第1行的我想表B的VAL_1作爲此行的時間戳是最高的比列的表A.對於行的時間戳小於/等於表B的表AI的2需要表B的第4行,依此類推。完整的結果應該是這樣的:

表A:

| ID |  TIMESTAMP  | UPDATE_VALUE | 
| 1 | 2010-09-23 14:25:00 |  VAL_1  | 
| 2 | 2010-09-25 12:00:00 |  VAL_4  | 
| 3 | 2010-09-25 14:00:00 |  VAL_5  | 
| 4 | 2010-09-27 16:50:00 |  VAL_8  | 

我使用SQLite 3,但在SQL查詢任何提示讚賞。

感謝您的時間和幫助,

回答

0

你更新表A具有未在表A和表B的一些時間戳值?

但只是要更新下面的時間戳應該工作。

update TableA set update_value = tb.source_value 
from TableA ta inner join TableB tb on ta.TimeStampColumn = tb.TimeStampColumn 
+0

沒有什麼要求 – Unreason 2010-09-27 13:03:20

1

我不知道SQLite的,但在SQL Server中這將是這樣的:

update tablea set update_value = (select top 1 source_value from tableb where tablea.timestamp<=tableb.timestamp order by tableb.timestamp desc) 
+2

您需要通過一個訂單在子查詢中,否則會挑適合where子句的來自tableb的隨機時間戳。 – 2010-09-27 12:44:46

+0

這種方法的問題是始終將相同的值(最大整體條目)寫入表中的所有條目:( – sugomat 2010-09-27 14:26:48

相關問題