Среднее SQL из нескольких таблиц на основе даты и времени

0

У меня есть база данных MySQL с измеренными температурами от трех разных датчиков. При каждом обновлении датчика новая температура записывается в базу данных. Таким образом, для каждого значения существуют разные временные метки.

Я хотел бы рассчитать среднюю температуру трех комнат для каждой отметки времени. Есть ли SQL-Query для этого?

Table A: timestamp + value
0000-00-00 00:00:00.000 19.6
2018-01-22 20:45:31.594 19.6
2018-01-22 20:48:20.344 19.7
2018-01-22 20:50:54.567 19.8
2018-01-22 20:53:14.594 19.9
2018-01-22 20:55:20.087 20.0

Table B: timestamp + value
0000-00-00 00:00:00.000 18.4
2018-01-22 20:50:53.700 18.4
2018-01-22 20:53:38.417 18.5
2018-01-22 20:56:08.668 18.6
2018-01-22 20:58:24.422 18.7
2018-01-22 21:00:25.707 18.8

Table C: timestamp + value
0000-00-00 00:00:00.000 20.1
2018-01-22 20:47:07.669 20.1
2018-01-22 20:49:32.196 20.2
2018-01-22 20:49:42.184 20.2
2018-01-22 20:51:42.177 20.2

Result:
2018-01-22 20:45:31.594 (19.6+18.4+20.1)/3
2018-01-22 20:47:07.669 (19.6+18.4+20.1)/3
2018-01-22 20:48:20.344 (19.7+18.4+20.1)/3
2018-01-22 20:49:32.196 (19.7+18.4+20.2(/3
…
  • 1
    Как вы соотносите время между столами? Есть ли идентификатор для всех 3? Или вы можете предположить, что каждая строка может быть объединена их порядковыми номерами? Поскольку в вашем результате вы используете время из таблицы A, которое соответствует строке 2, что произошло со средним значением для строки 1 в момент времени 0?
  • 0
    У меня нет идентификатора для всех 3. У меня есть только «метка времени» в качестве идентификатора. Для row1 также должно быть среднее значение. Я добавлю это. Я хотел бы рассчитать среднее без нормализации всего. Предполагая, что у нас есть TableC и определенная временная метка, я хотел бы построить среднее с последней временной меткой из таблицы A и таблицы B перед этой временной меткой.
Показать ещё 2 комментария
Теги:

3 ответа

0

Предполагая, что у нас есть таблица C и некоторая временная метка '2018-01-22 20: 51: 42.177', я хотел бы построить среднее значение с последней меткой времени из таблицы A и таблицы B до этой метки времени из таблицы C. Должно быть следующее: таблица B: '2018-01-22 20: 50: 53.700' и таблица A: '2018-01-22 20: 50: 54.567' плюс наоборот для других таблиц

Как насчет этого:

select
  c.timestamp,
  (
    c.value
    + (select coalesce(min(b.value),0.0) from b where b.timestamp =
        (select max(b2.timestamp) from b as b2
         where b2.timestamp <= c.timestamp))
    + (select coalesce(min(a.value),0.0) from a where a.timestamp =
        (select max(a2.timestamp) from a as a2
         where a2.timestamp <= c.timestamp))
  ) / 3 as average
from c
0

Если вы добавите датчики в свою систему, вы, вероятно, захотите создать для них единую консолидированную таблицу. Но это будет работать для трех датчиков:

select timestamp, avg(value) as average_value from (
select timestamp, value from table_a
union all
select timestamp, value from table_b
union all
select timestamp, value from table_c
)
group by timestamp
0

Соедините все три таблицы, используя временную метку, и найдите затем вычислить среднее значение температуры.

Выберите T1.TIMESTAMP, (T1.VAL + T2.VAL + T3.VAL)/3 AS AVG_TEMP FROM T1 JOIN T2 ON T1.TIMESTAMP = T2.TIMESTAMP JOIN T3 ON T1.TIMESTAMP = T3.TIMESTAMP

Ещё вопросы

Сообщество Overcoder
Наверх
Меню