Запрос на получение данных за последние X месяцев в JPQL - PullRequest
0 голосов
/ 29 мая 2019

Я построил следующий запрос 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);

Нужно изменить строку -> "И urlCount.updateTimeStamp <=: timeStamp") </p>

  @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);

1 Ответ

1 голос
/ 29 мая 2019

В 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)") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...