如何过滤groupBy()以仅在Laravel中的每个组中显示最高值?

时间:2018-08-22 03:09:17

标签: php mysql laravel

我想要这些数据的目的是让孩子获得最新的课程。

我的桌子:

| id | child_id | class_id   |
|----|----------|------------|
| 1  | 1        | 15         |
| 2  | 2        | 18         |
| 3  | 1        | 19         |
| 4  | 1        | 17         |

预期结果:

| id | child_id | class_id   |
|----|----------|------------|
| 2  | 2        | 18         |
| 4  | 1        | 17         |

实际结果:

| id | child_id | class_id   |
|----|----------|------------|
| 1  | 1        | 15         |
| 2  | 2        | 18         |

我当前正在使用Enrolment::orderBy('id', 'desc')->groupBy('child_id')->get();。但是,它无法正常工作。

3 个答案:

答案 0 :(得分:0)

尝试此代码。

select * from  table1
where id in (
    select 
        Max(id) as t.id
    from table1 as t
    GROUP BY t.child_id ORDER BY t.id desc
)

答案 1 :(得分:0)

这样,它可以解决您的问题:

SELECT * FROM `table_name` WHERE `id` IN (SELECT MAX(`id`) FROM `table_name` GROUP BY `child_id`) 

答案 2 :(得分:0)

您可以使用MAX来显示最高价值

 $response= Enrolment::groupBy('child_id')->get(['child_id', DB::raw('MAX(class_id) as class_ids')]);

并将结果打印为

echo "<pre>";
print_r($response->toArray());

输出将为

Array
(
    [0] => Array
        (
            [child_id] => 1
            [class_ids] => 19
        )

    [1] => Array
        (
            [child_id] => 2
            [class_ids] => 18
        )

)

不要忘记将use DB;导入控制器