0

我有一个起始表,其中每 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

谢谢

4

1 回答 1

0

对我来说,在类似的情况下帮助 UNNEST 在子查询和未嵌套的 ARRAY_AGG

            SELECT
                ARRAY_AGG(
                    DISTINCT lw_top
                ) as lw_top_array
            FROM (
                SELECT 
                   UNNEST(lw_top_array) AS lw_top
                  FROM
                    dati1_v
            ) as tmp;
于 2021-08-03T10:37:59.120 回答