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




В Oracle вы можете использовать ДОБАВИТЬ МЕСЯЦ с отрицательным значением для вычитания.
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)")
Почему бы вам просто не изменить запрос, чтобы выбрать что-нибудь после с определенным порогом временной метки, а затем передать любую временную метку, соответствующую «6 месяцев назад» в текущее время?