Скажем, у меня есть объект собрания. На каждом собрании есть один участник и дата встречи. В моей таблице встреч у меня может быть несколько встреч для каждого участника с разными датами для каждого. Мне нужен запрос JPA, который выберет только последнюю встречу для всех участников. Например, если моя таблица выглядит так:
Meeting ID | Attendee ID | Meeting Date
1 | 1 | 6/1/2011
2 | 2 | 6/1/2011
3 | 1 | 6/6/2011
4 | 3 | 6/6/2011
Мой результат должен быть
Meeting ID | Attendee ID | Meeting Date
2 | 2 | 6/1/2011
3 | 1 | 6/6/2011
4 | 3 | 6/6/2011
Использование JPA 2 против postgres. Встреча имеет 1-1 для участника и простую дату. Я подозреваю, что мне понадобится сделать группу по и макс (бла) и, возможно, присоединиться к себе, но я не уверен, как лучше подойти к этому.
Update: Проведя вечер с этим, у меня до сих пор нет приемлемого решения JPQL. Вот что я до сих пор:
select m from Meeting m
where m.meetingDate in
( select max(meet.meetingDate)
from Meeting meet group by meet.attendee )
У меня есть другие условия, которые не имеют отношения к этому вопросу, такие как фильтрация в отделе посетителей и многое другое. Единственная причина, по которой это работает, заключается в том, что мы отслеживаем дату встречи на второй (или более тонкий), и вероятность того, что будет две встречи в одно и то же время, минимальна. Мы помещаем некоторые вещи Java вокруг него, чтобы сохранить только последнюю встречу для каждого участника на случай, если мы получим два одновременно, но это довольно дрянное решение. Это действительно не должно быть слишком сложно получить все в запросе, но мне еще предстоит выяснить это.
Update2: Добавление тега sql, потому что, если мне нужно использовать sql для создания представления и создания объекта JPA для сопоставления с представлением, я в порядке с ним.