На самом деле, вы можете получить project_ids в SQL.Предполагая, что вам нужны уникальные идентификаторы проектов для четырех проектов с последними записями журнала, SQL будет выглядеть следующим образом:
SELECT project_id, max(log.date) as max_date
FROM logs
GROUP BY project_id
ORDER BY max_date DESC LIMIT 4;
Теперь вам действительно нужна вся информация журнала.В PostgreSQL 8.4 и более поздних версиях вы можете использовать функции управления окнами, но это не работает в других версиях / базах данных, поэтому я сделаю это более сложным способом:
SELECT logs.*
FROM logs JOIN (
SELECT project_id, max(log.date) as max_date
FROM logs
GROUP BY project_id
ORDER BY max_date DESC LIMIT 4 ) as latest
ON logs.project_id = latest.project_id
AND logs.date = latest.max_date;
Теперь, если вы иметь доступ к функциям управления окнами, это немного аккуратнее (я думаю, в любом случае), и, конечно, быстрее выполнять:
SELECT * FROM (
SELECT logs.field1, logs.field2, logs.field3, logs.date
rank() over ( partition by project_id
order by "date" DESC ) as dateorder
FROM logs ) as logsort
WHERE dateorder = 1
ORDER BY logs.date DESC LIMIT 1;
ОК, возможно, это не так легко понять, но поверьте мне на слово,он работает быстрее в большой базе данных.
Я не совсем уверен, каким образом это приводит к синтаксису объекта, или даже если это так.Кроме того, если вы хотите получить другие данные проекта, вам нужно присоединиться к таблице проектов.