可以使用子查询和GROUP BY语句来实现:

SELECT A.id, A.some_field, B.* FROM A
INNER JOIN (
    SELECT id, MAX(created_at) AS max_created_at FROM B
    GROUP BY id
) latest_b ON A.id = latest_b.id
INNER JOIN B ON latest_b.id = B.id AND latest_b.max_created_at = B.created_at
GROUP BY A.some_field

解释一下:

  1. 子查询查询B表中每个id的最新记录的created_at字段,使用GROUP BY语句分组。

  2. 再将子查询的结果与A表进行INNER JOIN操作,以id为关联字段。

  3. 最后再将结果与B表进行INNER JOIN操作,以id和created_at为关联字段,保证取到的是B表中最新的一条记录。

  4. 最后使用GROUP BY语句按照A表的某个字段进行分组,SELECT语句中可以选择需要显示的字段。

mysql A和B通过id关联并按照A表的某个字段分组分组后只取B表最新的一条记录

原文地址: https://www.cveoy.top/t/topic/bRkm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录