Как преобразовать запрос в HQL? - PullRequest
0 голосов
/ 01 июня 2019

У меня есть этот запрос в SQL Server, который использует два параметра startDate и endDate.

Не могли бы вы помочь мне преобразовать его в HQL, чтобы сделать его независимым от базы данных?

SELECT LeaseTable.CarMake, AVG(LeaseTable.LeaseHours)
FROM
(SELECT lease.carmake, 
    DATEDIFF(HH, case when lease.startDate <@startdate then @startdate else lease.startDate end, dateadd(DD, 1 ,case when lease.endDate > @endDate then @endDate else lease.endDate end)) as LeaseHours
    FROM lease
where 
    lease.startDate <= @endDate AND lease.endDate >= @startdate) as LeaseTable
GROUP BY LeaseTable.carMake 

1 Ответ

0 голосов
/ 04 июня 2019

Поскольку JPQL не поддерживает подзапрос, вам придется настроить запрос, чтобы получить результат

Вы можете написать запрос как этот

String query = "SELECT l.carMake ,"
         + "         AVG("
         + "           DATEDIFF("
         + "             HH,"
         + "             CASE WHEN lease.startDate <:startdate THEN :startdate ELSE lease.startDate end,"
         + "             dateadd(DD, 1 ,case WHEN lease.endDate > :endDate THEN :endDate ELSE lease.endDate end)"
         + "            )"
         + "         )"
         + " FROM lease l"
         + " WHERE l.startDate <= :endDate AND l.endDate >= :startdate"
         + " GROUP BY  l.carMake; ";

По сути, выньте функцию date_diff из подзапроса в функцию AVG

...