sql - 如何将不同表条目的数组合并在一起?
问题描述
我有一张表格可以跟踪不同日期的价格变化:
| 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)
一个(可能)重要的事情是跟踪原始数组中每个元素的位置,然后我们可以在聚合时将其用作二级排序标准。