SQL: обновление со значением из другой таблицы в зависимости от отметки времени - PullRequest
0 голосов
/ 27 сентября 2010

У меня возникла следующая проблема: я хочу обновить столбец «UPDATE_VALUE» таблицы A значениями из столбца «SOURCE_VALUE» из другой таблицы B. Обе таблицы имеют столбец отметки времени и значение, которое следует обновить в таблице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     |  

Таким образом, в строке 1 таблицы A я хочу VAL_1 таблицы B, поскольку метка времени этой строки является самой высокой в ​​таблице B, которая меньше / равнаотметка времени строки в таблице A. Для строки 2 таблицы AI требуется строка 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-запросу приветствуются.

Спасибоза ваше время и помощь,

Sugi

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Я не знаю в 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)
0 голосов
/ 27 сентября 2010

В вашем обновлении TableA есть некоторые значения отметок времени, которых нет в TableA и TableB?

Но для обновления отметок времени должно работать следующее.

...