我正在尝试基于JSON主体创建查询,该主体在浮点数数组中包含一个属性。这个JSON对象数组可以包含多个索引,但是我在获取最大属性和相关属性时遇到了麻烦。如何基于“日期”字段提取正确的数组索引?
我尝试执行CROSS JOIN LATERAL语句,该语句以DESC顺序排序并限制为1,但是该数据库具有需要查询的多行。 JSON结构:
{
"identification":"123a",
"array": [
{
"type":"created",
"num": 123.45
},
{
"type":"delete",
"num": 123.46
}
]
}
到目前为止,我的查询如下:
SELECT col -> 'identification' AS Identify FROM tbl t
CROSS JOIN LATERAL jsonb_array_elements(t.col -> 'array') jae (array)
ORDER BY jae.array -> 'num' DESC
我希望以JSON格式(包括“ identification”属性)全部返回结果。数组中“ num”属性的最大数字以及该对象中的其他属性应与标识一起返回。有点工作,但我看到查询返回数组的所有对象。查询结果应类似于
{
"Identify":"123a"
"array":{
"type":"delete",
"num": 123.46
}
}
结果应忽略“创建的”对象类型,而仅根据“ num”属性的最大大小返回属性。
答案 0 :(得分:0)
这应该做到:
SELECT json_build_object('Identify', t.col -> 'identification', 'array', x.elem)
FROM tbl t
CROSS JOIN LATERAL (
SELECT a.elem
FROM jsonb_array_elements(t.col -> 'array') a(elem)
ORDER BY a.elem -> 'num' DESC NULLS LAST
LIMIT 1
) x;
db <>提琴here
返回json
。您可能需要jsonb
。