Возвращает разбитый на страницы список строк из таблицы, где возвращается только последняя строка, отфильтрованная по од ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Возвращает разбитый на страницы список строк из таблицы, где возвращается только последняя строка, отфильтрованная по од

Сообщение Anonymous »

Представьте себе таблицу пользовательских сообщений, которая выглядит следующим образом:

Код: Выделить всё

| ID | MESSAGE | RECIPIENT_ID | ULTIMATE_PARENT_ID | SENT_AT             |
| 1  | Blah.   | 10           | 1                  | 2024-09-10T10:10:00 |
| 2  | Blah2   | 10           | 2                  | 2024-09-11T12:20:00 |
| 3  | Blah3   | 10           | 1                  | 2024-09-12T15:10:00 |
| 4  | Blah4   | 10           | 1                  | 2024-09-13T16:10:00 |
Я хотел бы отправить обратно последнее сообщение пользователю с дедуплицированным ULTIMATE_PARENT_ID. т. е. каждая строка будет иметь уникальный окончательный родительский идентификатор. Я отправлю объект нумерации страниц (Pageable), который, надеюсь, позаботится о нумерации страниц за меня.
По сути, запрос из приведенной выше таблицы должен отправлять обратно:

Код: Выделить всё

| ID | MESSAGE | RECIPIENT_ID | ULTIMATE_PARENT_ID | SENT_AT             |
| 2  | Blah2   | 10           | 2                  | 2024-09-11T12:20:00 |
| 4  | Blah4   | 10           | 1                  | 2024-09-13T16:10:00 |
Я использую Spring и Spring Data JPA. Но если это необходимо сделать с использованием собственного SQL, это нормально. Я пробовал, но не работает:

Код: Выделить всё

@Query(value = "SELECT dm FROM " +
"(SELECT DISTINCT d.ultimateParentId from DirectMessage d WHERE dm.recipient.id = :recipientId) DirectMessage dm " +
"ORDER BY dm.sentAt DESC", nativeQuery = true)
Page findPaginatedDirectMessagesByRecipientIdGroupByUltimateParentId(Long recipientId, Pageable pg);
Любая помощь по этому вопросу будет очень признательна, потому что я не могу найти решение ни у себя в голове, ни в Интернете!

Подробнее здесь: https://stackoverflow.com/questions/791 ... returned-f

Вернуться в «JAVA»