Допустим, у меня есть Собрание. У каждой встречи есть один участник и дата встречи. За моим столом для собраний у меня может быть несколько встреч для каждого участника с разными датами для каждого. Мне нужен запрос 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 для участников и простую дату с отметкой времени. Я подозреваю, что мне нужно будет создать группу by and max (бла) и, возможно, присоединиться к самому себе, но я не уверен, как лучше подойти к этому.
Обновление: Проведя вечер, играя с этим, у меня все еще нет приемлемого решения 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 для сопоставления с представлением. Я согласен с этим.