У меня есть следующая сущность JPA (методы получения, установки и несоответствующие поля опущены):
@Entity
@Table(name = "transaction")
public class Transaction {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "start_date", nullable = false)
private Date startDate;
}
Моя цель - реализовать запросы с использованием JPQL или критерия API, который будет возвращать среднее количество транзакций в день имаксимальное количество транзакций в день.
Собственные запросы SQL (база данных MySQL), дающие желаемый результат, выглядят так:
select max(cnt) from (
select date(start_date) start_date, count(t.id) cnt
from transaction t
group by date(t.start_date)
) t;
select avg(cnt) from (
select date(start_date) start_date, count(t.id) cnt
from transaction t
group by date(t.start_date)
) t;
К сожалению, использование собственных запросов SQL не рекомендуется, и JPQL не позволяетиспользование подзапросов в предложении where.
Заранее спасибо.
Добавление:
Я начал со следующего запроса данных Spring:
@Query("select max(cnt) from ("
+ "select date(t.startDate) startDate, count(t.id) cnt "
+ "from Transaction t "
+ "group by date(t.startDate))")
Но этоочевидно, не сработало:
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 22 [select max(cnt) from (select date(t.startDate) startDate, count(t.id) cnt from Transaction t group by date(startDate))]
Я могу представить, что с помощью сортировки и ограничения выходных данных можно управлять поиском max, но это не поможет для avg.