Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:根据时间戳使用其他表中的值进行更新_Sql_Sql Update_Multi Table - Fatal编程技术网

SQL:根据时间戳使用其他表中的值进行更新

SQL:根据时间戳使用其他表中的值进行更新,sql,sql-update,multi-table,Sql,Sql Update,Multi Table,我有以下问题:我想用另一个表B的列源值更新表A的列更新值。两个表都有一个时间戳列,表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

我有以下问题:我想用另一个表B的列源值更新表A的列更新值。两个表都有一个时间戳列,表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 |               |  
|  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     |  
表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中该行的时间戳。对于表A的第2行,我想要表B的第4行,依此类推。完整的结果应该如下所示:

表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 |               |  
|  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查询有任何提示,我将不胜感激

谢谢你的时间和帮助


Sugi

您的更新表A中有一些时间戳值,但这些值不在表A和表B中

但仅仅是更新时间戳,下面的操作就可以了

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

我不知道在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)

在子查询中需要order by,否则它将从表B中选择符合where子句的随机时间戳。这种方法的问题是,总是将相同的值maximum TOTALL entry写入表的所有条目: