Выберите данные из вложенного массива jsonb в Postgres - PullRequest
1 голос
/ 07 мая 2020

Я хочу выбрать последнее значение из массива, вложенного следующим образом:

{ tier: [
  { tier: [] },
  { tier: [] },
  { tier: [
      { tier: 1},
      { tier: 2},
      { tier: 3}, // < this item       
    ] 
  },
  ] 
}  

Я пытался использовать что-то подобное из других примеров, но синтаксис ускользает от меня. Я получаю либо «столбец не существует», либо «не удается извлечь элементы из объекта»

SELECT *, 
  t0->tier->(jsonb_array_length(t0->tier) - 1) t1,
  t1->tier->(jsonb_array_length(t1->tier) - 1) t2,
  t2->tier->(jsonb_array_length(t2->tier) - 1) t3,
FROM data t0

1 Ответ

3 голосов
/ 07 мая 2020

Вы можете ссылаться на него по отрицательному индексу:

SELECT t -> 'tier' -> -1 -> 'tier' -> -1
FROM data;

Здесь -1 ссылается на последний элемент массива, что означает, что вам не нужно вычислять количество элементов.

...