Mysql 如何使用一个参数唯一的HQL从表中进行选择?

Mysql 如何使用一个参数唯一的HQL从表中进行选择?,mysql,sql,spring,hibernate,hql,Mysql,Sql,Spring,Hibernate,Hql,我需要通过引用\u id ref\u id从提要表中选择所有唯一的行 我编写了一个请求,但该请求不返回唯一的值,而是提供所有行,包括具有相同ref_id的重复行。 所以select的工作方式不正确 预期: @查询从FeedEntity o中选择o,其中o.referenceId在从FeedEntity ol和o.id中选择不同的ol.referenceId

我需要通过引用\u id ref\u id从提要表中选择所有唯一的行

我编写了一个请求,但该请求不返回唯一的值,而是提供所有行,包括具有相同ref_id的重复行。 所以select的工作方式不正确

预期:

@查询从FeedEntity o中选择o,其中o.referenceId在从FeedEntity ol和o.id中选择不同的ol.referenceId<:lastId 列表getByIdBefore@ParamlastId长lastId,可分页; 这是为请求映射的类:

公共类实体{ @身份证 @GeneratedValuestrategy=GenerationType.IDENTITY 私人长id; @OneToOnefetch=FetchType.EAGER @JoinColumnname=用户\u id 私有用户实体用户; @列举 @Columnname=类型 私人饲养型; @Columnname=ref\u id 私有长引用ID; @Columnname=创建时间 私有时间戳; 公共FeedEntityUserEntity用户,FeedType类型,长引用ID{ this.user=用户; this.type=type; this.referenceId=referenceId; this.createTime=DateTimeUtil.getCurrentTimestamp; } } 本机查询正在运行

从提要中选择* 我在哪里 选择不同的MINId 来自feed fe 按fe.ref\U id分组
我希望你意识到你已经发布了问题和答案 这个

为什么你会期望同样的结果呢

您已经有了查询,只需使用它。根据您提供的屏幕截图,我建议的唯一区别是根据您的结果中的id 654和655将MIN替换为MAX,而MIN版本将返回622和655

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

我希望你意识到你已经发布了问题和答案 这个

为什么你会期望同样的结果呢

您已经有了查询,只需使用它。根据您提供的屏幕截图,我建议的唯一区别是根据您的结果中的id 654和655将MIN替换为MAX,而MIN版本将返回622和655

@Query("SELECT o FROM FeedEntity o WHERE o.id IN (SELECT MAX(ol.id) FROM FeedEntity ol GROUP BY ReferenceId) AND o.id < :lastId")
List<FeedEntity> getByIdBefore(@Param("lastId") Long lastId, Pageable pageable);
您希望在结果中包含来自所有具有相同ref_id的源行的具体内容?您希望在结果中包含来自所有具有相同ref_id的源行的具体内容?
@Query("SELECT o FROM FeedEntity o WHERE o.id IN (SELECT MAX(ol.id) FROM FeedEntity ol GROUP BY ReferenceId) AND o.id < :lastId")
List<FeedEntity> getByIdBefore(@Param("lastId") Long lastId, Pageable pageable);