возвращает
также из таблицы истории статусов максимальную дату по статусу. Статусов может несколько,
записей с одним статусом тоже. Теперь нужно добавить в результат еще одно поле(гуид),
не придумал ничего лучше, чем делать jsonb и уже в приложении при маппинге из мапы этой брать нужный результат.
Может есть решение более изящное?
SELECT pi.id as id, history.open_update AS f1
FROM ONLY items pi
INNER JOIN (SELECT
item_id AS item_id,
max(updated_at) FILTER (WHERE new_status = 'OPEN'::status) AS open_update,
FROM ONLY items_status_history
group by item_id
) history on history.item_id = pi.id
WHERE pi.id=1
SELECT pi.id as id, history.open_update AS f1
FROM ONLY items pi
INNER JOIN (SELECT
item_id AS item_id,
jsonb_object_agg(updated_at, updated_by) FILTER (WHERE new_status = 'OPEN'::status) AS open_update,
FROM ONLY items_status_history
group by item_id
) history on history.item_id = pi.id
WHERE pi.id=1
Ничего непонятно. Но вообще: самое изящное решэние для доьавления поля — это добавить поле. (А, да, первый как минимум запрос синтаксически некорректен — на запятой после AS open_update, упадёт).
В плане запятых просто убрал лишнее, пропустил что-то. Я не могу же добавить еще одно в функцию max, а мне нужно вытащить теперь не только дату последней строки по условию , но и еще одно поле.
Кажэтся, чуть-чуть понял, вам тут полезно будет сменить это на LATERAL JOIN (и LIMIT 1).
Спасибо за наводку, изучу
Обсуждают сегодня