MySQL像concat一样连接表,但只选择最新的行
我有需要最新状态的案例。有两个表,我简化了我的表,如下所示:MySQL像concat一样连接表,但只选择最新的行,mysql,sql,join,select,greatest-n-per-group,Mysql,Sql,Join,Select,Greatest N Per Group,我有需要最新状态的案例。有两个表,我简化了我的表,如下所示: 我想用联接表B显示A中的表,因此它将显示如下: 我会感谢Mysql查询或codeigniter查询生成器。谢谢你如果你运行的是MySQL 8.0,你可以用行号()来实现这一点: 在早期版本中,一个选项是使用相关子查询进行筛选: select a.a_id, b.status, b.created_at from tablea a inner join tableb b on a.a_id = b.a_id where b.cr
我想用联接表B显示A中的表,因此它将显示如下:
我会感谢Mysql查询或codeigniter查询生成器。谢谢你如果你运行的是MySQL 8.0,你可以用
行号()来实现这一点
:
在早期版本中,一个选项是使用相关子查询进行筛选:
select a.a_id, b.status, b.created_at
from tablea a
inner join tableb b on a.a_id = b.a_id
where b.created_at = (
select max(b1.created_at) from tableb b1 where b1.a_id = b.a_id
)
关于相关子查询解决方案的性能,考虑一个索引:<代码> Table(AyId,CealDeTyAt)< /> >
< P>如果你运行MySQL 8,你可以用<代码> RooSuxNoMe()/<代码>:< /P> 在早期版本中,一个选项是使用相关子查询进行筛选:select a.a_id, b.status, b.created_at
from tablea a
inner join tableb b on a.a_id = b.a_id
where b.created_at = (
select max(b1.created_at) from tableb b1 where b1.a_id = b.a_id
)
使用相关子查询解决方案的性能,考虑一个索引:<代码> Table(AyID,CealDeTyAt)< /C> > /P>
根据a\u id从B组中选择MAX(创建的)代码>
然后在下面的查询中使用第一个结果,您将得到所需的输出
FROM A
JOIN B ON A.a_id = B.a_id
WHERE B.created_at IN (SELECT MAX(created_at) FROM B GROUP BY a_id);
首先从B表中找到最新创建的_at值
示例:根据a\u id从B组中选择MAX(创建的)代码>
然后在下面的查询中使用第一个结果,您将得到所需的输出
FROM A
JOIN B ON A.a_id = B.a_id
WHERE B.created_at IN (SELECT MAX(created_at) FROM B GROUP BY a_id);
谢谢,第一个解决方案似乎很好。我已经在我的查询中进行了测试,它是有效的。需要一些工作,使它与Codeigniter查询生成器。谢谢mate@far1023 . . . .如果这回答了你的问题,你应该接受答案。谢谢。第一个解决方案似乎很好。我已经在我的查询中进行了测试,它是有效的。需要一些工作,使它与Codeigniter查询生成器。谢谢mate@far1023 . . . .如果这回答了您的问题,您应该接受答案。这似乎是可行的,但如果我对两个(或更多)记录具有相同的create_at
值,则将为我们提供两个(或更多)具有相同create_at
值及其状态的记录。但感谢您的回答这似乎是一项工作,但如果我有两条(或更多)记录相同的create_at
值,它将为我们提供两条(或更多)具有相同create_at
值及其状态的记录。但是谢谢你的回答
FROM A
JOIN B ON A.a_id = B.a_id
WHERE B.created_at IN (SELECT MAX(created_at) FROM B GROUP BY a_id);