如何在包含jsonb数据的postgres sql列中找到最小值?

如何在包含jsonb数据的postgres sql列中找到最小值?,sql,postgresql,jsonb,Sql,Postgresql,Jsonb,我在postgres数据库中有一个表t。它有一个列data,其中包含以下格式的jsonb数据(对于每条记录)- { "20161214": {"4": ["3-14", "5-16", "642"], "9": ["3-10", "5-10", "664"] }, "20161217": {"3": ["3-14", "5-16", "643"], "7": ["3-10", "5-10", "661"] } } 其中,20161214是日期,“4”是月份,642是金额 我需要找到表中每条记

我在postgres数据库中有一个表
t
。它有一个列
data
,其中包含以下格式的jsonb数据(对于每条记录)-

{
"20161214": {"4": ["3-14", "5-16", "642"], "9": ["3-10", "5-10", "664"] },
"20161217": {"3": ["3-14", "5-16", "643"], "7": ["3-10", "5-10", "661"] } 
}
其中,
20161214
是日期,
“4”
是月份,
642
是金额

我需要找到表中每条记录的最小金额以及该金额所属的月份

我所尝试的:

使用jsonb_每个函数,分离键值对,然后使用min函数。但是我仍然无法得到它所属的月份

如何做到这一点

select  j2.date
       ,j2.month
       ,j2.amount

from    t 

        left join lateral  

           (select      j1.date
                       ,j2.month
                       ,(j2.value->>2)::numeric  as amount

            from        jsonb_each (t.data) j1 (date,value) 

                        left join lateral jsonb_each (j1.value) j2 (month,value)
                        on true

            order by    amount

            limit       1   
            ) j2

        on true

或者(无连接):


数量总是数组中的第三个元素吗?我知道确切的要求是什么,所以我给你写了两个解决方案,请看一看,看它们是否合适。是的,数量总是第三个元素。这就是我需要的,非常感谢Dudu!你能稍微解释一下这个问题吗?为什么要使用某些东西,比如limit 1在没有limitHi Dudu的情况下执行查询,我们如何更改上述查询以从每个日期获取最小值,比如日期20161214642和日期20161217643?
+----------+-------+--------+
| date     | month | amount |
+----------+-------+--------+
| 20161214 | 4     | 642    |
+----------+-------+--------+
select
    min(case when amount = min_amount then month end) as month,
    min_amount as amout
from (
    select
        key as month,
        (select min((value->>2)::int) from jsonb_each(value)) as amount,
        min((select min((value->>2)::int) from jsonb_each(value))) over(partition by rnum) as min_amount,
        rnum
    from (
        select
            (jsonb_each(data)).*,
            row_number() over() as rnum
        from t
    ) t
) t
 group by
     rnum, min_amount;