我有一组带有"数据的记录"字段,实际上是一个JSON对象。在我对它进行排序之后,我想连接这些记录的这些JSON对象。
这是我的疑问:
select string_agg(data, ', ')
from timeseriesdata TS, atomicseries AT
where AT.timeseriesdata_ptr_id = TS.id
AND AT.atomic_id = 11 AND date between '2016-03-01' and '2016-03-30'
以上(几乎)做了我想要的,但是我想知道是否可以通过TS表的字段timestamp
对数据进行排序。
答案 0 :(得分:3)
您无法在ORDER BY
子句中指定顺序,因为此时您剩下的只有一行,其中包含汇总在一个字符串中的所有data
(所以您不要t有一个ts
列可以按顺序排序。)
您需要在ORDER BY
函数中指定STRING_AGG
:
-- unspecified order
WITH d(ts, data) AS (
VALUES
(1 , 'json1'),
(2 , 'json2'),
(10, 'json10'),
(3 , 'json3')
)
SELECT STRING_AGG(data, ',')
FROM d
;
┌──────────────────────────┐
│ string_agg │
├──────────────────────────┤
│ json1,json2,json10,json3 │
└──────────────────────────┘
(1 row)
-- ORDERed BY ts
WITH d(ts, data) AS (
VALUES
(1 , 'json1'),
(2 , 'json2'),
(10, 'json10'),
(3 , 'json3')
)
SELECT STRING_AGG(data, ',' ORDER BY ts)
FROM d
;
┌──────────────────────────┐
│ string_agg │
├──────────────────────────┤
│ json1,json2,json3,json10 │
└──────────────────────────┘
(1 row)