Middle+
SELECT * FROM t_sensor_data;
sobes.tech АИ
Одговор од АИ
Для агрегирования показаний по каждой комнате и дате с разделением по типам датчиков удобно использовать агрегатные функции с условной агрегацией (CASE WHEN). Это позволит вывести в одной строке значения температуры, влажности и давления, если они есть, иначе NULL.
Пример запроса:
SELECT
date::date AS date, -- если нужно только дата без времени
room_id,
MAX(CASE WHEN sensor_type = 1 THEN value END) AS temperature,
MAX(CASE WHEN sensor_type = 2 THEN value END) AS humidity,
MAX(CASE WHEN sensor_type = 3 THEN value END) AS pressure
FROM t_sensor_data
GROUP BY date::date, room_id
ORDER BY date, room_id;
Объяснение:
date::date— преобразуем timestamp к дате без времени, чтобы группировать по дню.MAX(CASE WHEN sensor_type = X THEN value END)— условно выбираем значение для каждого типа датчика. MAX используется, чтобы агрегировать, при этом если данных нет, будет NULL.- Группируем по дате и комнате.
Такой запрос покажет по каждой комнате и дате значения всех трёх типов датчиков, если они были сняты.