【问题标题】:Query to get data for past X months in JPQL在 JPQL 中查询以获取过去 X 个月的数据
【发布时间】:2019-10-15 06:34:12
【问题描述】:

我已经构建了以下 JPQL 查询,根据传入的时间戳发送结果。 我希望对此进行修改并传入一个数字,而不是月份值,并获取过去 6 个月的所有结果。

如果相关,我正在使用 Oracle DB。我尝试在此查询中传入 datediff 方法,但它会引发编译错误。 有没有办法做到这一点?

我当前的查询。

@Query("SELECT SUM(urlCount.referEventTotalCount) " +
            "FROM UrlCountEntity urlCount " +
            "JOIN urlCount.eventTypes et " +
            "WHERE urlCount.url.urlTx IN :urls " +
            "AND et.referEventTypeDs =:eventType " +
            "AND urlCount.updateTimeStamp <=:timeStamp") 
    Integer getTotalCount(@Param("urls") List<String> urls, @Param("eventType")String eventType, @Param("timeStamp")Timestamp timeStamp);

寻找修改行 -> "AND urlCount.updateTimeStamp

  @Query("SELECT SUM(urlCount.referEventTotalCount) " +
            "FROM UrlCountEntity urlCount " +
            "JOIN urlCount.eventTypes et " +
            "WHERE urlCount.url.urlTx IN :urls " +
            "AND et.referEventTypeDs =:eventType ")
            // "AND urlCount.updateTimeStamp <=:timeStamp") // instead of this, pass in the numOfMths value to calculate how much data to show (example past 3 mths)
  Integer getTotalCount(@Param("urls") List<String> urls, @Param("eventType")String eventType, @Param("numOfMths")int numOfMths);

【问题讨论】:

  • 您为什么不简单地修改查询以选择特定时间戳阈值之后的任何内容,然后传入当前时间对应于“6 个月前”的任何时间戳?

标签: java oracle jpa jpql


【解决方案1】:

使用 Oracle,您可以使用带有负值的 ADD_MONTH 来减去。

ADD_MONTHS(SYSDATE, -6)

你可以这样调用这个函数:

function('ADD_MONTH', CURRENT_DATE, -6)

所以您的查询可能如下所示:

 @Query("SELECT SUM(urlCount.referEventTotalCount) " +
        "FROM UrlCountEntity urlCount " +
        "JOIN urlCount.eventTypes et " +
        "WHERE urlCount.url.urlTx IN :urls " +
        "AND et.referEventTypeDs =:eventType " +
        "AND urlCount.updateTimeStamp >= function('ADD_MONTH', CURRENT_DATE, :month)") 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2015-10-19
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多