Postgres array json последняя дата

#json #postgresql

#json #postgresql

Вопрос:

у меня есть массив json, подобный этому:

 [
  {
    "date": "26/11/2020 23:27",
    "note": "test1"
  },
  {
    "date": "22/11/2020 22:59",
    "note": "test2"
  },
  {
    "date": "18/11/2020 17:08",
    "note": "test3"
  }
]
 

Я хотел бы взять элемент, который содержит самые последние данные.

Мой старый запрос для получения первого элемента был таким:

 (notes::json->0)::json->>'note' as note,
(notes::json->0)::json->>'date' as date_note
 

Ответ №1:

пошаговая демонстрация: db<>скрипка

 SELECT 
    elem.value ->> 'date' as thedate,
    elem.value ->> 'note' as note
FROM t,
    json_array_elements(data) elem                                  -- 1 
WHERE id = 4123
ORDER BY to_timestamp(elem ->> 'date', 'DD/MM/YYYY HH24:MI') DESC   -- 2
LIMIT 1                                                             -- 3
 
  1. Извлеките все элементы массива в одну строку
  2. Считайте строку datetime из date поля, преобразуйте в временную метку и используйте ее для упорядочивания всех элементов массива с самой последней временной меткой
  3. Просто верните самый первый (= самый последний) элемент массива.

Комментарии:

1. Есть ли какой-нибудь способ изменить этот запрос? выберите (tb.notes::json-> 0)::json->>’примечание’ как примечание, (tb.notes::json-> 0) ::json->>’дата’ как date_note из таблицы как tb, где id = 4545

2. мне нужно напрямую извлечь массив с самой последней датой

3. dbfiddle.uk /… Конечно. Просто добавьте предложение WHERE для фильтрации идентификатора и извлечения элементов из значения