我有以下问题:我想用来自另一个表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的任何提示都表示赞赏。
感谢您的时间和帮助,
杉
答案 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