SQL:根据时间戳更新其他表中的值

时间:2010-09-27 12:32:02

标签: sql sql-update multi-table

我有以下问题:我想用来自另一个表B的“SOURCE_VALUE”列更新表A的列“UPDATE_VALUE”。两个表都有一个时间戳列,应该在表中更新的值A应该是表B的行之一,其最大时间戳小于/等于表A行的时间戳。

例如:

表A:

|  ID  |       TIMESTAMP      |  UPDATE_VALUE |  
|   1  |  2010-09-23 10:00:00 |               |  
|   2  |  2010-09-25 05:20:00 |               |  
|   3  |  2010-09-25 18:10:30 |               |  
|   4  |  2010-09-27 07:04:30 |               |  

表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,因为该行的时间戳是表B中的最高值,该表B小于/等于表A中行的时间戳。对于表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-query的任何提示都表示赞赏。

感谢您的时间和帮助,

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您的更新TableA有一些不在TableA和TableB中的时间戳值吗?

但只是为了更新时间戳,应该可以正常工作。

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