А Вы покажите: 1. Версию PosgreSQL. 2. Запрос. 3. План — именно EXPLAIN (ANALYZE, BUFFERS) и, желательно: 4. \d каждой используемой в запросе таблицы. Всё текстом, конечно (можно на paste site). Может, подскажут что-то...
Хмм, постараюсь, спс.
https://pastebin.com/Rhfx1Te3 вот так вроде все это робит
И из 4 пунктов, которые я просил, Вам удался один. Попробуйте ещё раз. ;) Дело в том, что без этой информации все "подсказки" обычно приходят к просьбам сначала показать эту информацию (я же не просто так всё это написал).
Таблицы которые учавствуют в подзапросе inner join ddl не нужны? они большие и если в них проблемы думаю explain покажет
https://pastebin.com/TRBiQZ7m - исправляюсь
Гораздо лучше! :) Я посмотрю...
Хмм... мне кажется, или у Вас с самим запросом что-то не так? SELECT obj.id, obj.name, evnt.description_id, evnt.po_time FROM data_guardobject AS obj CROSS JOIN LATERAL ( SELECT ev.description_id, ev.po_time FROM data_event AS ev INNER JOIN data_device AS dev -- 1:1 ON ev.device_id = dev.id INNER JOIN data_guardzone AS zn -- data_guardzone(guard_object_id) REFERENCES data_guardobject(id) /* 1:N? */ ON dev.guardzone_id = zn.id WHERE zn.guard_object_id = obj.id -- 1:N? ORDER BY ev.po_time DESC NULLS LAST -- зачем? это поле --- NOT NULL LIMIT 1 ) AS evnt WHERE evnt.description_id = 4; -- почему условие не внутри "evnt"?
оно выберет для каждого объекта евент 4/ А мне надо все строки с последними id по которым потом отсортировать те, где id 4
А, понятно. Я подумал, что нужно наоборот.
Обсуждают сегодня