如何将不同 table 条目的数组合并在一起?

How to merge arrays of different table entries together?

我有一个 table 可以跟踪不同日期的价格变化:

| ID | price           | date       |
|----|-----------------|------------|
| 1  | {118, 123, 144} | 2020/12/05 |
| 2  | {222, 333, 231} | 2020/12/06 |
| 3  | {99, 55, 33}    | 2020/12/07 |

我想检索按日期排序的单个数组中的所有价格,这样我会得到这样的结果:

| ID | price                              |
|----|------------------------------------|
| 1  | {118,123,144,222,333,231,99,55,33} |

我怎样才能做到这一点?在我看来,挑战在于创建一个新数组或将值附加到现有数组。

您可以取消嵌套并使用正确的顺序重新聚合:

select array_agg(x.val order by t.date, x.rn) as all_prices
from mytable t
cross join lateral unnest(t.price) with ordinality as x(val, rn)

一件(可能)重要的事情是跟踪每个元素在原始数组中的位置,然后我们可以在聚合时将其用作二级排序标准。