объединить массивы в совокупный запрос - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть стартовая таблица, в которой некоторые метеоданные хранятся каждые 15 минут, в одном поле хранится влажный лист при 1-минутной выборке в виде числового массива, поэтому у меня есть массив из 15 значений в каждой строке.

Теперь я хочу создать агрегацию этой таблицы за 1 час, создав для этого поля массив из 60 значений.

Я сначала попробовал array_cat, но говорит

array_cat (numeric []) не существует

функция явно существует, поэтому я подумал, что формат не соответствует ожидаемому, я сначала попытался распаковать, а затем агрегировать, снова не работая.

Наконец-то я смог агрегировать через преобразование строк, но это не то, что я хотел (я мог бы в будущем применить некоторую числовую разработку для этого массива с 60 значениями)

Я вставляю запрос для дальнейших исследований

SELECT 
dati1_v.id_stazione, to_char(dati1_v.data_ora, 'YYYY-MM-DD HH24:00:00'::text) AS date_hour, 
round(avg(dati1_v.temp1_media), 2) AS t_avg, round(avg(dati1_v.ur1_media), 2) AS hum_avg, sum(dati1_v.pioggia) AS rain_tot, max(dati1_v.pioggia) AS rain_max, 
round((avg(( SELECT avg(lw.lw) AS avg FROM unnest(dati1_v.lw_top_array) lw(lw))) - lws.top_min) / (lws.top_max - lws.top_min) * 100::numeric, 2) AS lw_top_avg, 
array_agg(( SELECT round((avg(lw.lw) - lws.top_min) / (lws.top_max - lws.top_min) * 100::numeric, 2) AS round FROM unnest(dati1_v.lw_top_array) lw(lw))) AS lw_top_array,
array_cat(dati1_v.lw_top_array)  AS lw_top_array_tot,
-- array_agg((select lw_top_array from unnest(dati1_v.lw_top_array))) AS lw_top_array_tot,
-- array_agg(array_to_string(dati1_v.lw_top_array, ',')) AS lw_top_array_tot,
round((avg(( SELECT avg(lw.lw) AS avg FROM unnest(dati1_v.lw_bottom_array) lw(lw))) - lws.bottom_min) / (lws.bottom_max - lws.bottom_min) * 100::numeric, 2) AS lw_bottom_avg, 
array_agg(( SELECT round((avg(lw.lw) - lws.bottom_min) / (lws.bottom_max - lws.bottom_min) * 100::numeric, 2) AS round FROM unnest(dati1_v.lw_bottom_array) lw(lw))) AS lw_bottom_array
FROM dati1_v, lw_settings lws
WHERE lws.id = 1
GROUP BY dati1_v.id_stazione, to_char(dati1_v.data_ora, 'YYYY-MM-DD HH24:00:00'::text), lws.top_min, lws.top_max, lws.bottom_min, lws.bottom_max
ORDER BY dati1_v.id_stazione, to_char(dati1_v.data_ora, 'YYYY-MM-DD HH24:00:00'::text)

в частности, мои попытки были связаны с этим конкретным блоком:

array_cat(dati1_v.lw_top_array)  AS lw_top_array_tot,
-- array_agg((select lw_top_array from unnest(dati1_v.lw_top_array))) AS lw_top_array_tot,
-- array_agg(array_to_string(dati1_v.lw_top_array, ',')) AS lw_top_array_tot

Спасибо

...