首页 > 解决方案 > 使用 SQL 查询获取第二个最大日期 json 对象

问题描述

我正在尝试从 json 列中获取第二个最大日期 json 数据。

这是 jsonb 列

--------
 value
--------
{
    "id": "90909",
    "records": [
        {
            "name":"john",
            "date": "2016-06-16"
        },
        {
             "name":"kiran",
            "date": "2017-06-16"
        },
        {
            "name":"koiy",
            "date": "2018-06-16"
        }
    ]
}

如何选择第二个最大日期json对象..

预期输出:-

 {
     "name":"kiran",
     "date": "2017-06-16"
 }

如果我们在记录中只有一个对象意味着这将是第二个最大日期

任何建议也会有所帮助..

标签: postgresql

解决方案


我的主要建议是:如果您的数据是结构化的,请不要将其存储在 JSON 中。如果将其构建为关系表,则使用它会容易得多。

但无论如何,这是获取第二个最新日期对象的一种方法。首先解包数组,然后按日期排序,取倒数第二个:

SELECT obj.* 
FROM your_table, jsonb_array_elements(value->'records') obj 
ORDER BY obj->'date' DESC
LIMIT 1 OFFSET 1;

                  value
-----------------------------------------
 {"date": "2017-06-16", "name": "kiran"}
(1 row)

推荐阅读