从 Postgres jsonb 数组中提取最早日期

Extract Earliest Date from Postgres jsonb array

假设我在 postgres 列中有一个 jsonb 数组,例如

[{"startDate": "2019-09-01"}, {"startDate": "2019-07-22"}, {"startDate": "2019-08-08"}]

有没有办法从jsonb数组中提取最早的startDate?我试过使用 jsonb_array_elements 但看不到如何遍历所有元素。

您可以使用标量 sub-query

select (select (e.element ->> 'startDate')::date as start_date
        from jsonb_array_elements(t.the_column) as e.element
        order by start_date desc
        limit 1) as start_date
from the_table t

您需要将 the_tablethe_column 替换为您正在使用的实际 table 和列名。

将派生值转换为date后可以直接使用MIN()聚合:

SELECT MIN((elm ->> 'startDate')::date)
  FROM t
 CROSS JOIN jsonb_array_elements(jsdata) AS j(elm)

Demo