0

次の問題があります。テーブル A の列「UPDATE_VALUE」を別のテーブル B の列「SOURCE_VALUE」の値で更新したいのですが、両方のテーブルにタイムスタンプ列があり、テーブル A で更新する必要がある値はテーブル A の行のタイムスタンプより小さい/等しい最高のタイムスタンプを持つテーブル B の行の 1 つ。

例えば:

表 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 が必要です。この行のタイムスタンプは、テーブル A の行のタイムスタンプより小さい/等しいテーブル B の最高値であるためです。テーブル 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 クエリに関するヒントをいただければ幸いです。

お時間を割いていただき、ありがとうございました。

スギ

4

2 に答える 2

1

SQLiteではわかりませんが、SQLServerでは次のようになります。

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

Update 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 に答える