- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此查询用于检索一对多关系中的最后一条记录(请参阅
SQL join: selecting the last records in a one-to-many relationship )
SELECT p.*
FROM customer c
INNER JOIN (
SELECT customer_id, MAX(date) MaxDate
FROM purchase
GROUP BY customer_id
) MaxDates ON c.id = MaxDates.customer_id
INNER JOIN purchase p ON MaxDates.customer_id = p.customer_id
AND MaxDates.MaxDate = p.date;
final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
final CriteriaQuery<Purchase> query = cb.createQuery(Purchase.class);
final Root<CustomerEntity> root = query.from(Customer.class);
// here should come the join with the sub-select
final Path<Purchase> path = root.join(Customer_.purchases);
query.select(path);
final TypedQuery<Purchase> typedQuery = entityManager.createQuery(query);
return typedQuery.getResultList();
最佳答案
使用 JPA2.0 无法实现这样的查询,但我们可以通过重构查询来解决它
SELECT p.*
FROM customer c
/* This part gets the maximum date of a customer purchase
We will replace it with a subquery in the where
INNER JOIN (
SELECT customer_id, MAX(date) MaxDate
FROM purchase
GROUP BY customer_id
) MaxDates ON c.id = MaxDates.customer_id */
/* This part crosses the maximum date of a customer with the purchase itself to obtain the information
INNER JOIN purchase p ON MaxDates.customer_id = p.customer_id
AND MaxDates.MaxDate = p.date*/
-- We make the crossing with the purchase (there will be N tickets per customer, with N being the number of purchases)
INNER JOIN purchase p on p.customer_id = c.id
-- In the where clause we add a condition so that these N entries become that of the maximum date
WHERE p.date = (
SELECT MAX(p2.date)
FROM purchase p2
WHERE p2.customer_id = c.id)
;
使用标准 API 的实现将是这样的
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Purchase> query = cb.createQuery(Purchase.class);
Root<Customer> root = query.from(Customer.class);
Join<Customer,Purchase> join = root.join(root.get("purchases"),JoinType.INNER);
Subquery<Date> sqMaxdate = cq.subquery();
Root<Purchase> sqRoot = sqMaxDate.from(Purchase.class);
Join<Purchase,Consumer> sqJoin = sqRoot.join(sqRoot.get("customer"),JoinType.INNER)
sqMaxDate.select(cb.max(sqRoot.get("date")));
sqMaxDate.where(cb.equal(sqJoin.get("id"),root.get("id")));
query.where(cb.equal(join.get("date"),sqMaxDate.getSelection()));
query.select(join);
TypedQuery<Purchase> typedQuery = entityManager.createQuery(query);
return typedQuery.getResultList();
关于jpa-2.0 - jpa 标准-api : join with subselect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27509322/
我有两个表 项目 confirmmasterdetail 我想从item表中选择不在confirmmasterdetail表中的记录当我运行此查询时,它返回空结果集。 SELECT itemId ,
所以我想为一个项目做以下事情。 我有 3 个表。前两个我们现在关心(第三个是为了让您更好地理解): author {id, name} authorship {id, id1, id2} paper
我有 2 张 table 交易表 +----+----------+-----+---------+---- | TID | CampaignID | DATE |
我有 2 个表:订单和预订。 订单表包含来自客户的唯一订单。每个客户都预订了 1 到 5 年的储物柜,因此预订表可以包含 1 到 5 行 pr。顺序(每年 1 行)。预订表中的每一行都包含 end_d
我正在尝试从 sql 查询中获取选择的逆。这是我的场景,我通过查询选择与一个家庭相关的付款,那些在过去 6 个月内捐款的人被认为是活跃的。我对过去 6 个月内没有条目的人感兴趣。 我可以选择过去 6
我有三个表: 帖子:id, title, authorId, text 作者:id, 名字, 国家 评论:id, authorId, text, postId 我想运行一个 mysql 命令,该命令选
我正在为这种简单的和平代码而伤脑筋,它不想工作,而且我想不出任何其他解决方案... 你能帮忙让它工作吗? SELECT chart FROM chart WHERE (select count(use
我正在尝试生成一份销售报告,其中列出每个产品 + 给定月份的总销售额。这有点棘手,因为产品价格可能会在整个月内发生变化。例如: 在 1 月 1 日和 1 月 15 日之间,我的公司以每个 10 美元的
我是 hibernate 的新手。我需要了解以下问题: (1) hibernate mapping中的subselect是什么? (2) 如何在 hbm 文件中映射 subselect? (3) 如果
我有一个这样的表: +--------------+--------------+--------------+ | userid | username | proxy
我正在尝试做这样的事情,但使用 Criteria 而不是 HQL: select user from User where user in ( select user from UserDom
我有两个表 [Users] 和 [Teams]。我的用户表看起来像这样 [ID][E-Mail]。我的 Teams 表看起来像这样 [Team][UserID]。 我需要像这样做一个子选择: SELE
有一些我正在努力工作的选择 SELECT DISTINCT a.client_key, client_name FROM Bloggers AS a LEFT JOIN BloggersPosts A
我有两个表,我想减少比较两个表之间的记录所花费的时间。我无法内部连接我的两个表,因为它们都是纵向表,这意味着 animalid 可以重复多个,即使它对于 milk 记录是唯一的 表1(我的错误表) +
我有两个具有相同字段但来自不同表的对象(foo_something 和 bar_something 实际上不是普通表,有几个连接操作的结果)。我使用 @Subselect hibernate 注释来获
有什么方法可以从模式名称取自主选择中字段之一的值的模式进行子选择?有点像这样: create schema a; create table a.foo(id int); create schema b
使用 postgresql 我有一个表 A,其中包含列 company_name、department_name、一些其他数据和 department . 我有另一个表 B,其中只有 company_
此查询未在合理时间内完成: mysql> select * from prices where symbol='GOOG' and date in (select max(date) from pri
所以,我有一张捐款表。它存储一个 $ 值和一个列框,他们可以在其中选择货币或实物捐赠。实物捐赠可以有美元,但通常没有。实物捐赠是指有人捐赠了实物元素,例如割草机、 table 、椅子等。然后我有捐助者
当查询包含数百万文档的 MongoDB 集合以及对非索引字段进行过滤或排序时,查询运行速度太慢,因为 mongo 需要扫描整个集合。在 Mysql 上,这可以通过执行仅过滤最后 40k 行的子选择来实
我是一名优秀的程序员,十分优秀!