Есть сущность project_id. Там могут быть task_id. Нужно в каждом project_id найти одну таску с минимальной датой создания и удовлетворяющая определенным условиям, которые можно опустить. Вот мой запрос:
SELECT a.id, a.name, a.status, b.project_id, b.created ...
FROM tasks a
JOIN (
SELECT project_id, min(created) as created
FROM tasks
WHERE tasks.id = ANY (...)
GROUP BY project_id
) b
ON a.project_id=b.project_id AND a.created = b.created;
Этот запрос прекрасно работает если не одно НО. Таски могут быть созданы в одно время. В таком случае вернется несколько тасков в одном project_id. Да, это можно пофиксить с помощью DISTINCT ON(created) - при дублировании поля created возвращать одно рандомное из дублей, но тогда есть вероятность вывода неправильного результата.
Нужно как-то задействовать id тасков.