В этом ответе предполагается, что в вашей таблице есть столбец (или, возможно, комбинация столбцов), который можно использовать для уникальной идентификации записи. Давайте назовем это myid
.
Для начала, мы можем использовать json_array_elements
, чтобы разбить массив JSON на строки следующим образом:
select myid, x.value, x->>'sortNum'
from
mytable,
json_array_elements(mycolumn->'array1') x
;
Возвращает:
myid | value | sortnum
---------------------------------------------------------
1 | {"name":"Bob","sortNum":123} | 123
1 | {"name":"Tim Horton","sortNum":456} | 456
Теперь мы можем превратить это в подзапрос и использовать ROW_NUMBER()
для фильтрации элемента массива с самым высоким атрибутом sortNum
:
select value
from (
select
x.value,
row_number() over(partition by myid order by x->>'sortNum' desc) rn
from
mytable,
json_array_elements(mycolumn->'array1') x
) y
where rn = 1;
Урожайность:
value
-----------------------------------
{"name":"Tim Horton","sortNum":456}
Демонстрация на DB Fiddle