首页 > 解决方案 > 如何按一个字段过滤唯一值?

问题描述

我想通过一个字段和两个日期从数据库中获取唯一值

我的实体字段访问:

  • ID
  • 客人身份
  • 日期

我有一些方法,我想通过唯一字段“guestId”获取访问列表:

@Query("SELECT DISTINCT v FROM Visit v WHERE  v.date BETWEEN :start AND :to")
    List<Visit> getBetween(@Param("start") Date start, @Param("to") Date to);

但到此期间,我得到了所有实体的列表。

我试过查询:

"SELECT DISTINCT  FROM visits WHERE date BETWEEN :start AND :to"

但它也不起作用。

例如:

表“访问”示例:

 Id     GuestId    Date  
 100    200        2019.09.07 
 101    201        2019.09.07 
 102    200        2019.09.07 
 103    201        2019.09.08 
 104    201        2019.09.08 
 105    200        2019.09.08 
 106    201        2019.09.09 
 107    201        2019.09.09 
 108    200        2019.09.09

接下来我想做查询

从访问中选择不同的日期,其中日期介于:'2019.09.08' 和:'2019.09.08' 之间

我想获得以下列表:

GuestId    Date  
201        2019.09.08  
200        2019.09.08

请帮我找到执行查询

谢谢。

标签: sqlspringhibernatespring-data-jpa

解决方案


您必须使用guestIddate字段创建类并使用本机查询,例如:

class DistinctVisitView {
    Integer guestId;
    LocalDate date;
}

@Query(nativeQuery = true, value = "SELECT DISTINCT guest_id, date FROM visits WHERE date BETWEEN :start AND :to")
List<DistinctVisitView> getBetween(@Param("start") Date start, @Param("to") Date to);

推荐阅读