у меня есть две таблицы, чья упрощенная структура выглядит следующим образом:SQL: Включение строки в столбцы для переменного Числа строк
RESPONSES
id
created
ACCESSORY VALUES
id
response_id
sensor_id
value
Я хочу, чтобы создать представление, которое выравнивает все значения аксессуаров для данного ответа в одну строки в течение периода времени (фильтрация по response.created
). Я думаю, что мне нужна сводная таблица или Crosstab, но я не знаком с обоими, а примеры, которые я нашел, в основном имеют дело с известным количеством столбцов. Чтобы усложнить ситуацию, данный датчик мог появиться только в течение периода времени, если пользователь начал или остановил его отслеживание в течение рассматриваемого времени. В идеале я бы держал NULL в этой колонке для датчика в любых строках, когда его нет. Это возможно? Если да, то я на правильном пути или смотрю не туда?
SQL, чтобы получить данные в виде отдельных строк выглядит
SELECT r.id, a.sensor_id, a.value from results_response r
INNER JOIN results_accessoryvalue a ON r.id = a.response_id
WHERE r.installation_id = 40
AND r.created BETWEEN '2013-04-01' AND '2013-05-01'
ORDER BY r.created
, но я не имею никакой удачи, пытаясь использовать его в кросс-таблице, потому что я не знаю, как определить динамические столбцы.
Это похоже на действительно хорошую альтернативу. Я забыл, что вы можете это сделать в Postgres. Полагаю, что я могу делать агрегацию внутри подзапроса. – Tom
По какой-то причине соединение не работает в подвыборке. Если я жестко закодирую значение идентификатора таблицы ответов, я получаю данные, но когда я присоединяюсь, я получаю пустой массив.Это то, что выглядит SQL: 'SELECT created, array (выберите sensor_id from results_accessoryvalue, где response_id = results_flattenedresponse.id) FROM results_flattenedresponse' – Tom
Я думаю, это потому, что select sensor_id из results_accessoryvalue, где response_id = results_flattenedresponse.id, этот код ссылается на две таблицы но только 1 находится в инструкции from –