如何根据JSON对象数组中属性的最大大小进行查询

时间:2019-04-19 01:56:49

标签: sql arrays json postgresql

我正在尝试基于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”属性的最大大小返回属性。

1 个答案:

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