我在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

+----------+-------+--------+
| date     | month | amount |
+----------+-------+--------+
| 20161214 | 4     | 642    |
+----------+-------+--------+

08-19 12:15