Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL像concat一样连接表,但只选择最新的行_Mysql_Sql_Join_Select_Greatest N Per Group - Fatal编程技术网

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>

  • 首先从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);
    
  • 首先从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);