mysql案例,班级分组后,获取班级中最后一个学生的记录

1.sql

SELECT t.*
FROM your_table t
         INNER JOIN (
    -- 子查询找到每个班级的最大 id(假设 id 是自增的,可以作为记录顺序的参考)
    SELECT class_id, MAX(id) AS max_id
    FROM your_table
    GROUP BY class_id
) subquery ON t.class_id = subquery.class_id AND t.id = subquery.max_id;

2.说明

在这个查询中,首先通过子查询找到每个班级的最大 id 值,假设 id 是自增的,可以认为它能反映记录的先后顺序。然后将原始表与子查询的结果进行内连接,连接条件是班级 class_id 相同且 id 值等于子查询中找到的最大 id,这样就可以得到每个班级中的最后一个学生的记录。
你需要将 your_table 替换为你的实际表名。如果你的表中没有自增的 id 列,或者不能以 id 作为记录顺序的参考,可以考虑使用其他可以确定记录顺序的字段来替代 id 在上述查询中的作用。

3.注意点

your_table 是同一个表。

4.扩展

php代码

把id作为数组的key

$rows2 = [];
if($rows)
 {
     // 提取所有的id作为新的键
     $ids = array_column($rows, 'id');// 提取除id之外的其他数据作为值
     $values = array_map(function($item) {
         return $item;
     }, $rows);

     // 使用array_combine将id作为键,其他数据作为值
     $rows2 = array_combine($ids, $values);
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值