Переписать сам присоединиться к JPQL - PullRequest
2 голосов
/ 02 марта 2012

Мне нужно преобразовать это самостоятельное соединение в JPQL:

SELECT s1.*
FROM site AS s1
JOIN (SELECT site_type, MAX(last_update_date) AS LastUpdate
      FROM site
      WHERE site.last_update_date > "2011-02-27 16:57:53"
      GROUP BY site_type) AS s2
ON s1.site_type = s2.site_type
AND s1.last_update_date = s2.LastUpdate
ORDER BY s1.last_update_date DESC

Редактировать: решение:

SELECT s1
FROM Site s1 
WHERE s1.lastUpdateDate = ( SELECT MAX(s2.lastUpdateDate) 
                            FROM Site s2 
                            WHERE s1.siteType = s2.siteType)
AND s1.lastUpdateDate > "2011-02-27 16:57:53"
ORDER BY s1.lastUpdateDate DESC

Вместо самостоятельного объединения я использовал дополнительный оператор select для lastUpdateDate.

Редактировать 2: это лучшее решение, поскольку оно также включает значения NULL. Единственным недостатком является то, что я не могу использовать TypedQuery.

SELECT s.id, s.url, s.siteType, MAX(s.lastUpdateDate) as maxLastUpdateDate 
FROM Site s 
GROUP BY s.siteType 
HAVING (maxLastUpdateDate < "2011-02-27 16:57:53" OR maxLastUpdateDate IS NULL)

1 Ответ

0 голосов
/ 05 марта 2012
SELECT s.id, s.url, s.siteType, MAX(s.lastUpdateDate) as maxLastUpdateDate 
FROM Site s 
GROUP BY s.siteType 
HAVING (maxLastUpdateDate < "2011-02-27 16:57:53" OR maxLastUpdateDate IS NULL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...