首页 > 解决方案 > 使用 SELECT MAX 的原则 GROUPBY

问题描述

这是我的桌子:

id | place |    date    |  valid
 1 |  ONE  | 10/12/2019 | true
 2 |  ONE  | 11/12/2019 | true
 3 |  ONE  | 12/12/2019 | true
 4 |  ONE  | 13/12/2019 | false
 5 |  ONE  | 14/12/2019 | false
 6 |  TWO  | 10/12/2019 | true
 7 |  TWO  | 11/12/2019 | true
 8 |  TWO  | 12/12/2019 | true
 9 |  TWO  | 13/12/2019 | true
10 |  TWO  | 14/12/2019 | false
11 |  OTH  | 10/12/2019 | true
12 |  OTH  | 11/12/2019 | true
13 |  OTH  | 12/12/2019 | true
14 |  OTH  | 13/12/2019 | true
15 |  OTH  | 14/12/2019 | true

我正在尝试使用学说和 QueryBuilder 来获取我的表的 id。我需要通过valid等于“true”的地方获取MAX日期的ID。随着数据的显示,我想得到这个结果:

 3 |  ONE  | 12/12/2019 | true
 9 |  TWO  | 13/12/2019 | true
15 |  OTH  | 14/12/2019 | true

我尝试了一些查询生成器,但我无法得到我想要的结果。

$qb = $this->createQueryBuilder("o");
$qb->select('o.id, o.place');
$qb->addSelect($qb->expr()->max('o.date').' AS maxDate');
$qb->andWhere($qb->expr()->eq('o.valid', true));
$qb->groupBy('o.place');

我也尝试过使用子查询,但在对地点进行分组、获取最大日期并返回 ID 3 / 9 和 15 时遇到问题。

请问如何获得最大日期并按地点分组我的行?

谢谢

标签: group-bydoctrine-ormmaxquery-builder

解决方案


推荐阅读