2014-09-17 2 views
1

Моя база данных находится в mysql.
Есть несколько вещей, которые я пытаюсь достичь. У меня есть два временных ряда данных. Один из них записывается с интервалом 15 минут, а другой записывается всякий раз, когда происходит изменение стоимости. Я пытаюсь присоединиться к этим двум таблицам.
Желаемая таблица будет состоять из 3 столбцов, {time_stamp, table1.value, table2.value} и того же числа строк, что и таблица1
1) table1.value просто сохраняет свое значение.
2) колонки table2.value имеют последнее значение из таблицы 2, в течение 15 минут до от time_stamp в table1 в
3) если table2.value имеет нулевое значение, сохранить последнее известное значениеПоследняя запись из группы по выбору, заменить значение null на последнее известное значение

Я попытался налево присоединиться две таблицы и попытались сделать «group by» time_stamp и попытались получить последнюю запись из «group by» без успеха. Я также попытался заменить нулевые значения в полученном столбце
«используя @n: = COALESCE (table2.value, @ n)». Я думаю, что это не сработало, потому что объединенные результаты не были в порядке. Я попытался добавить заказ в конце запроса также без успеха.

Можно ли достичь только одним запросом? Цените любую помощь!

стол-1

+---------------------------------------+ 
|time      | value  | 
+---------------------------+-----------+ 
|'2014-09-15 06:15:02.1500' | 71  | 
|'2014-09-15 06:30:02.1500' | 72  | 
|'2014-09-15 06:45:02.1500' | 73  | 
|'2014-09-15 07:00:02.1500' | 74  | 
|'2014-09-15 07:15:02.1500' | 75  | 
|'2014-09-15 07:30:02.1500' | 76  | 
|'2014-09-15 07:45:02.1500' | 77  | 
+---------------------------+-----------+ 

стол-2

+---------------------------------------+ 
|time      | value  | 
+---------------------------+-----------+ 
|'2014-09-15 06:14:02.1500' | 30  | 
|'2014-09-15 06:15:02.1500' | 55  | 
|'2014-09-15 06:18:02.1500' | 60  | 
|'2014-09-15 06:20:02.1500' | 62  | 
|'2014-09-15 06:23:02.1500' | 35  | 
|'2014-09-15 07:36:02.1500' | 45  | 
|'2014-09-15 07:38:02.1500' | 36  | 
|'2014-09-15 07:40:02.1500' | 87  | 
+---------------------------+-----------+ 

result_table

+---------------------------------------+----------+ 
|time      |table1.val |table2.val|     
+---------------------------+-----------+----------+ 
|'2014-09-15 06:15:02.1500' | 71  |30  | 
|'2014-09-15 06:30:02.1500' | 72  |35  | 
|'2014-09-15 06:45:02.1500' | 73  |35  | 
|'2014-09-15 07:00:02.1500' | 74  |35  | 
|'2014-09-15 07:15:02.1500' | 75  |35  | 
|'2014-09-15 07:30:02.1500' | 76  |35  | 
|'2014-09-15 07:45:02.1500' | 77  |87  | 
+---------------------------+-----------+----------+ 

ответ

1

Вы можете использовать подзапрос в списке значений для этого:

select time, value as t1value, 
coalesce(@val := (
    select value from table2 
    where time < table1.time 
     AND time >= table1.time - INTERVAL 15 MINUTE 
    order by time desc limit 1 
), @old) as t2value, @old := @val from table1; 
+0

Я пробовал это. Возвращаемое значение - это посмотреть на всю таблицу-2, а не только до отметки времени. – Roijjer

+0

Состояние на время Pomyk

+0

Я изменил запрос, должно быть хорошо сейчас :) – Pomyk

Смежные вопросы