Postgres json将结果排成一行

时间:2018-03-10 17:10:39

标签: sql json postgresql

这就是我现在所拥有的

SELECT json_build_object(concat(name, r_id), 
       json_agg(json_build_array(value,created_at) ORDER BY created_at ASC))
FROM data
group by concat(name, r_id);

这返回的是3行数据,我需要它们与散列

在同一行

GOT:

第1行:{"Name1" : [["70.2", "2018-02-19T16:26:08.857134"], ["69.93", "2018-02-19T16:26:16.568789"]}

第2行:{"Name2" : [["70.2", "2018-02-19T16:26:08.857134"], ["69.93", "2018-02-19T16:26:16.568789"]}

第3行:{"NewName1" : [["70.2", "2018-02-19T16:26:08.857134"], ["69.93", "2018-02-19T16:26:16.568789"]}

预期

{
    "Name1": [
        ["70.2", "2018-02-19T16:26:08.857134"],
        ["69.93", "2018-02-19T16:26:16.568789"]
    ],
    "Name2": [
        ["70.2", "2018-02-19T16:26:08.857134"],
        ["69.93", "2018-02-19T16:26:16.568789"]
    ],
    "NewName1": [
        ["70.2", "2018-02-19T16:26:08.857134"],
        ["69.93", "2018-02-19T16:26:16.568789"]
    ]
}

这是一个使用此示例http://sqlfiddle.com/#!17/0b10d/1

的sqlfiddle

1 个答案:

答案 0 :(得分:1)

使用聚合函数json_object_agg():

select json_object_agg(name, details)
from (
    select concat(name, r_id) as name, 
           json_agg(json_build_array(value,created_at) order by created_at asc) as details
    from data
    group by concat(name, r_id)
    ) s

SqlFiddle.