【发布时间】:2021-09-02 04:26:39
【问题描述】:
我正在尝试按日期检索最新记录,然后按 ID 检索并按标签对它们进行分组。到目前为止,我可以正确检索它们。
问题是;我无法获取 ID,因为它是 group by,结果中可能有超过 1 个。
桌子
| id | label | end_date |
|---|---|---|
| 12 | quarterly | 2011-06-30 |
| 13 | quarterly | 2010-01-01 |
| 14 | annual | 2011-06-30 |
| 15 | annual | 2011-06-30 |
| 16 | monthly | 2012-06-30 |
| 17 | monthly | 2011-06-30 |
预期结果
| id | label | end_date |
|---|---|---|
| 12 | quarterly | 2011-06-30 |
| 15 | annual | 2011-06-30 |
| 16 | monthly | 2012-06-30 |
我尝试过的
$premiums = Premium::selectRaw('label, max(end_date) as end_date')
->groupBy('label')
->get();
注意事项:
- 我尝试将
id添加到selectRaw,但它返回错误
SQLSTATE[42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #3 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“premiums.id”;这与 sql_mode=only_full_group_by 不兼容(SQL: select label, max(end_date) as end_date, id from
premiumsgroup bylabel)
- 我也尝试将
max(id) as id添加到selectRaw,但它返回错误的结果 (ID 与数据库中对应的日期/标签不匹配)
【问题讨论】:
-
@Strawberry 我认为将
max(id) as id添加到selectRaw会给我这个。由于group by label不允许您拥有多个 ID,因此我将最后一个 ID 放在首位。