У меня есть большая таблица mySQL, которая содержит значения для всех видов данных (все с разными data_id) и метку времени (метка времени unix в мс). Я пытаюсь построить (в режиме реального времени) плоттер для всех этих данных, и я хочу иметь возможность построить любые данные на вертикальной оси против любых других данных на горизонтальной оси. Проблема, которую я предпочитаю, состоит в том, как эффективно связать точки данных на основе их временных отметок.
Набор данных достаточно велик, частота регистрации составляет около 10 Гц, и я хочу, чтобы данные назначались каждые 1-5 минут. Мне уже удалось сделать (своего рода) эффективный вызов SQL, чтобы получить среднее значение и среднюю временную отметку за каждую 1 минуту:
SELECT AVG(value), AVG(timestamp)
FROM
(
(
SELECT value, timestamp
FROM database
WHERE
data_id = 100 AND
timestamp < ... and timestamp > ...
ORDER BY timestamp DESC
) as data
)
GROUP BY timestamp DIV 60000
ORDER BY timestamp DESC;
Однако теперь я хочу иметь возможность построить график, например, data_id 100 против data_id 200 вместо data_id 100 против времени. Итак, как мне связать значения data_id 100 и 200 для временного шага около 1 минуты для большого набора данных?
Я уже попробовал следующее, но вызов SQL занял слишком много времени ...
SELECT a.timestamp, a.value, b.value
FROM
(
SELECT value, timestamp
FROM daq_test.data_f32
WHERE
data_id = 166 AND
timestamp < 1507720000000 AND
timestamp > 1507334400000
ORDER BY timestamp DESC
) a,
(
SELECT value, timestamp
FROM daq_test.data_f32
WHERE
data_id = 137 AND
timestamp < 1507720000000 AND
timestamp > 1507334400000
ORDER BY timestamp DESC
) b
WHERE a.timestamp DIV 60000 = b.timestamp DIV 60000
ORDER BY a.timestamp DESC;