Как получить все ключи, упорядоченные по значению ключа из jsonb postgresql - PullRequest
1 голос

как получить все ключи из порядка json по значению собственного ключа например: ключ - это просто число, подобное uuid, а значение - это дата

.

Я уже сделал это, но без заказа:

CREATE TABLE IF NOT EXISTS products
(
    id text UNIQUE NOT NULL
        CONSTRAINT crm_id_pkey PRIMARY KEY,
    materials jsonb
);
select 
  jsonb_object_keys(materials) as key,
from 
  products
WHERE 
 id = '5'

поэтому мне нужна таблица результатов ключей, упорядоченных путем сравнения их собственных дат (значений), таких как:

select 
  jsonb_object_keys(materials) as key,
from 
  products
WHERE 
 id = '5'
ORDERED BY KEY.GETVALUE()

НО ORDERED BY key.getValue () функция не существует в postgres, как я могу сделать упорядочивание, если это возможно?

UPDATE: Я нашел другое решение не лучше, но оно тоже работает:

select jsonb_object_keys(materials) as keys,
       materials -> jsonb_object_keys(materials) as date
from client_material
WHERE crm_id = '5'
order by date DESC;

1 Ответ

0 голосов
/ 24 мая 2019

Примерные данные:

insert into products values
('5', '{"k1": "2019-05-01", "k2": "2019-04-01"}');

Используйте jsonb_object_keys(materials) в боковом соединении, чтобы можно было использовать результирующие ключи в предложении order by:

select key
from products
cross join jsonb_object_keys(materials) as key
where id = '5'
order by (materials->>key)::date;

 key 
-----
 k2
 k1
(2 rows)

Рабочий примерв rextester.

...