Как перевести этот MySQL-запрос Group By в интерфейс Spring JPA / CrudRepository - PullRequest
0 голосов
/ 09 июля 2019

У нас есть таблица MySQL

id | username | state | action
 1 |  Ringo   |   CA  |  sell
 2 |  Paul    |   CA  |  sell
 3 |  John    |   CA  |  buy
 4 |  Ringo   |   CA  |  sell   
 5 |  Ringo   |   MA  |  sell   

И нам нравится получать последние действия «продать» каждого пользователя в «CA» (поэтому в этом примере для Ringo нам нравится получать запись № 4, а не запись № 1).

В MySQL мы можем сделать что-то подобное (держу пари, это можно улучшить):

select * from actions where id in (
   select max(id) from actions 
   where action = "sell"
   and state = "CA"
   group by username
)

Мы пытались сделать это в CrudRepository Спрингом несколькими способами, но, похоже, никто не делает то, что нам нравится. Вот некоторые из вещей, которые мы попробовали:

public interface ActionsRepository extends CrudRepository<ActionEntry, Long>{   
List<ActionEntry> findDistinctUserNameByStateAndActionOrderByIdDesc(String state, String action);
List<ActionEntry> findTopByStateAndActionOrderByIdDesc(String namespace, String action);

Есть ли способ сделать это в JPA?

...