0

我有以下问题:我想用另一个表 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 的最高值,小于/等于表 A 中行的时间戳。对于表 AI 的第 2 行,需要第 4 行表 B 等等。完整的结果应如下所示:

表 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 的任何提示表示赞赏。

感谢您的时间和帮助,

4

2 回答 2

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)
于 2010-09-27T12:38:10.647 回答
0

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

但只是为了更新时间戳跟随应该有效。

update TableA set update_value = tb.source_value
from TableA ta inner join TableB tb on ta.TimeStampColumn = tb.TimeStampColumn
于 2010-09-27T12:37:18.623 回答