Как выбрать из таблицы с помощью HQL уникальные по одному параметру?

Как выбрать из таблицы с помощью HQL уникальные по одному параметру Table feed

Я написал запрос, но запрос не возвращает уникальных значений, но дает все строки, содержащие повторяющиеся строки с тем же ref_id. Итак, select работает неправильно

Результат ожидаемый

@Query("SELECT o FROM FeedEntity o WHERE o.referenceId IN (SELECT DISTINCT ol.referenceId FROM FeedEntity ol) AND o.id < :lastId")
List<FeedEntity> getByIdBefore(@Param("lastId") Long lastId, Pageable pageable);

Это класс, отображаемый для запроса:

public class FeedEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private UserEntity user;

@Enumerated
@Column(name = "type")
private FeedType type;

@Column(name = "ref_id")
private Long referenceId;

@Column(name = "create_time")
private Timestamp createTime;

public FeedEntity(UserEntity user, FeedType type, Long referenceId) {
    this.user = user;
    this.type = type;
    this.referenceId = referenceId;
    this.createTime = DateTimeUtil.getCurrentTimestamp();
}
}

Мне нужно выбрать все уникальные строки по reference_id (ref_id)

Нативный запрос в Mysql выдал правильное значение

SELECT * FROM feed WHERE id IN (SELECT DISTINCT MIN(Id) FROM feed fe GROUP BY 
fe.ref_id)

введите сюда описание изображения

И вот правильный запрос для выборки.

@Query("SELECT o FROM FeedEntity o WHERE o.id IN (SELECT DISTINCT MIN(o.id) 
FROM FeedEntity fe GROUP BY fe.referenceId)") 

Надеюсь кому-то будет полезно

Единственное что не работает с доп условием

 @Query("SELECT o FROM FeedEntity o WHERE o.id < :lastId AND o.id IN (SELECT 
 DISTINCT MIN(fe.id) FROM FeedEntity fe GROUP BY fe.referenceId)")
 List<FeedEntity> getByIdBefore(@Param("lastId") Long lastId, Pageable 
 pageable);

Ответы (1 шт):

Автор решения: Vit
 @Query("SELECT o FROM FeedEntity o WHERE o.id < :lastId AND o.id IN (SELECT 
 DISTINCT MIN(fe.id) FROM FeedEntity fe GROUP BY fe.referenceId)")
 List<FeedEntity> getByIdBefore(@Param("lastId") Long lastId, Pageable 
 pageable);
→ Ссылка