Это довольно сложная задача в Redshift, которая, в отличие от Postgres, имеет плохую поддержку для управления JSON и не имеет функции для удаления массивов.
Вот одна способ сделать это с помощью таблицы номеров; вам нужно заполнить таблицу увеличивающимися числами, начиная с 0
, например:
create table nums as
select 0 i union all select 1 union all select 2 union all select 3
union all select 4 union all select 5 n union all select 6
union all select 7 union all select 8 union all select 9
;
После того, как таблица создана, вы можете пройтись по массиву JSON, используя json_extract_array_element_text()
, и проверить ее содержание с json_extract_path_text()
:
select json_extract_path_text(item, 'avg') as my_avg
from (
select json_extract_array_element_text(t.items, n.i, true) as item
from (
select json_extract_path_text(mycol, 'data', true ) as items
from mytable
) t
inner join nums n on n.i < json_array_length(t.items, true)
) t
where json_extract_path_text(item, 'name') = 'late';