我有一组带有“数据”字段的记录,它实际上是一个 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
对数据进行排序。
最佳答案
您不能在 ORDER BY
子句中指定顺序,因为此时您只剩下一行,其中包含聚合在一个单一行中的所有 data
字符串(因此您不再有一个 ts
列来排序)。
您需要在 STRING_AGG
函数中指定 ORDER BY
:
-- 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)
关于Postgresql,同时对记录进行字符串连接和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44799732/