Postgresql,字符串连接和记录同时排序

时间:2017-06-28 10:18:41

标签: postgresql

我有一组带有"数据的记录"字段,实际上是一个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对数据进行排序。

1 个答案:

答案 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)