@FHUser

Как сформировать запрос что бы выбрать последовательные записи с группировкой по времени?

Редко сталкиваюсь, прошу направить на путь.

Несколько датчиков пишутся в одну таблицу MySQL.

CREATE TABLE `Measure` (
`ID` INT(10) NOT NULL AUTO_INCREMENT,
`DateTime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`SensorName` VARCHAR(6) NULL DEFAULT NULL COMMENT 'код датчика' COLLATE 'utf8_general_ci',
`SensorValue` DECIMAL(5,2) NULL DEFAULT NULL COMMENT 'измеренное значение',
PRIMARY KEY (`ID`)
)
ENGINE=MyISAM;

где в SensorName может находится 'sensor_1', 'sensor_2', 'sensor_3', 'sensor_4'

Надо сформировать массив для графика такой структуры
view_array['DateTime']['SensorValue для sensor_1']['SensorValue для sensor_2']['SensorValue для sensor_3']['SensorValue для sensor_4']

где
DateTime - это заданные (например ежеминутные) интервалы выборки, например
2020-10-01 12:01
2020-10-01 12:02
2020-10-01 12:03
2020-10-01 12:04
2020-10-01 12:05
2020-10-01 12:06

а SensorValue будет значение, усредненное в этих интервалах.

Как сделать такой запрос?
На один датчик осилил, дальше застрял.
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
BojackHorseman
@BojackHorseman Куратор тега PHP
...в творческом отпуске...
SELECT 
 `DateTime`,
 AVG(CASE WHEN `SensorName` = 'sensor_1' THEN `SensorValue` ELSE NULL END) AS `SensorValue1`,
 AVG(CASE WHEN `SensorName` = 'sensor_2' THEN `SensorValue` ELSE NULL END) AS `SensorValue2`,
 AVG(CASE WHEN `SensorName` = 'sensor_3' THEN `SensorValue` ELSE NULL END) AS `SensorValue3`,
 AVG(CASE WHEN `SensorName` = 'sensor_4' THEN `SensorValue` ELSE NULL END) AS `SensorValue4`
FROM `Measure`
GROUP BY `DateTime`
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы