【问题标题】:How filtered unique values by one filed?如何按一个字段过滤唯一值?
【发布时间】:2019-09-08 20:16:34
【问题描述】:

我想在一个字段和两个日期之间从数据库中获取唯一值

我的实体字段访问:

  • 身份证
  • 客人身份
  • 日期

我有一些方法,我想通过唯一字段“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

接下来我要查询

SELECT DISTINCT FROM visit WHERE date BETWEEN :'2019.09.08' AND :'2019.09.08'"

我想获取以下列表:

GuestId    Date  
201        2019.09.08  
200        2019.09.08

请帮我找到执行查询

谢谢。

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果。 (作为格式化文本,没有图像。)
  • 为什么不SELECT DISTINCT guestId FROM...
  • 添加到描述中的表格示例
  • "SELECT DISTINCT guestId FROM visit WHERE date BETWEEN :start AND :to" 不起作用,我得到异常调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: Validation failed for query for public abstract java.util.List com.java.library.repository.DataJpaRepository.getBetween(java.util.Date,java.util.Date)!
  • 因为您的实体名为 Visit,而不是 visit。而且您必须使用别名:select distinct v.guestId from Visit v where v.date between :start and :to

标签: sql spring hibernate spring-data-jpa


【解决方案1】:

您必须使用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);

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2022-12-04
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多