到目前为止,Spring的JPA存储库对我来说已经足够了,但是现在我需要一个自定义查询。我已经为此努力了一天,试图学习更多有关SQL,联接等的知识,并提出了一个本机MySQL查询,该查询(我认为)可以实现我想要的功能:我想找到每个“产品”的所有最新信息,并带有一个唯一网址。示例:
PRODUCT
id | url | created_date
---------------------------------------------
1 | http://foo.bar/products/a | 2020-04-01
2 | http://foo.bar/products/a | 2020-04-02
3 | http://foo.bar/products/b | 2020-04-02
4 | http://foo.bar/products/a | 2020-04-03
5 | http://foo.bar/products/b | 2020-04-03
RESULT
id | url | created_date
---------------------------------------------
4 | http://foo.bar/products/a | 2020-04-03
5 | http://foo.bar/products/b | 2020-04-03
这是我想出的原生MySQL查询:
SELECT *
FROM product t
INNER JOIN
(SELECT url, MAX(created_date) AS Latest
FROM product
GROUP BY url) grouped_url
ON t.url = grouped_url.url
AND t.created_date = grouped_url.Latest
我尝试将其转换为JPQL以便使用@Query注释似乎很尴尬,因此我什至不用在这里张贴它们:D有人可以帮我吗?
答案 0 :(得分:1)
将您的SQL查询转换为以下形式:
SELECT *
FROM product p1
WHERE NOT EXISTS ( SELECT 1
FROM product p2
WHERE p1.url = p2.url
AND p1.created_date < p2.created_date )
它与JPQL兼容-请参见Subqueries - EXISTS Expressions。
或者您可以以>= ALL (..)
的形式使用相同的想法。