(они связаны: одно дело - много жалоб)
Как мне отобрать только те дела, у которых последняя по времени жалоба была "Судебной", но также у дела одна из предыдущих жалоб была с регистрационным номером "777"
Я смотрю в сторону массивов, но совсем их не знаю в постгресе. Может кто подскажет? В ступоре уже давно.
Опубликуйте структуру таблиц и тестовые данные на SQLize.online посмотрим
Первое -- выбрать (сабселектом или оконной функцыей) последнюю по времени жалобу. Потом -- внешний селект на результат, который отберёт "Судебные". Второе -- банальный JOIN и WHERE.
Можно со вторым поподробнее? Для чего делать Join? для последних судебных жалоб? С чем?
select distinct on (c.id) * from case c inner join complaints comp on comp.case_id = c.id where (select complaint_type from complaints where case_id = c.id order by date desc limit 1) = 'Судебная' and comp.reg_num = 777
Наоборот. _Последнюю_ жалобу дела проще сабселектом. А вот дело , у которого есть жалоба 777 -- джойном спокойно достаётся. Джойнишь то и другое и ищешь 777. Правда, на одно подходящее дело можэт быть несколько строк -- но это можно DISTINCT ON или GROUP BY отфильтровать.
Обсуждают сегодня