возвращает
                  
                  
                  также из таблицы истории статусов максимальную дату по статусу. Статусов может несколько,
                  
                  
                  записей с одним статусом тоже. Теперь нужно добавить в результат еще одно поле(гуид),
                  
                  
                  не придумал ничего лучше, чем делать 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).
Спасибо за наводку, изучу
Обсуждают сегодня