Sobes.tech
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.
  • Группируем по дате и комнате.

Такой запрос покажет по каждой комнате и дате значения всех трёх типов датчиков, если они были сняты.