You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何获取jsonb字段audio下的最后一个随机键

查询JSONB字段中audio节点的最后一个键

现有如下JSONB字段内容,其中audio节点下的键为随机值(无法预先知晓具体返回值),请问能否查询出audio节点下的最后一个键(示例中为"2814462280")?

{
    "test": {
        "audio": {
            "1175828715": {
                "direction": "outbound"
            },
            "2814462280": {
                "direction": "inbound"
            }
        }
    }
}

可以实现,以下是针对PostgreSQL的具体方案:

方案1:按键的数值排序取最后一个(适用于键为数字字符串的场景)

如果audio下的键都是字符串类型的数字,先提取所有键,转成数值类型排序后取最后一个:

SELECT key AS last_audio_key
FROM your_table,
     jsonb_object_keys(json_data->'test'->'audio') AS key
ORDER BY key::numeric DESC
LIMIT 1;

方案2:按插入顺序取最后一个(PostgreSQL 12+适用)

从PostgreSQL 12开始,jsonb会保留键的插入顺序。可以用jsonb_each()结合WITH ORDINALITY获取键的顺序索引,再取索引最大的键:

SELECT key AS last_audio_key
FROM your_table,
     jsonb_each(json_data->'test'->'audio') WITH ORDINALITY AS j(key, val, idx)
ORDER BY idx DESC
LIMIT 1;

注意事项

  • PostgreSQL 12之前的版本不保留jsonb键的插入顺序,此时只能按键的自然排序结果取最后一个
  • 若键是数字字符串,务必转成数值类型排序,否则字符串排序逻辑会导致结果不符合预期(比如"100"会排在"20"前面)

内容的提问来源于stack exchange,提问作者rwehresmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:15:32