mysql - 从多个几乎相同的表中选择具有最大日期的行

标签 mysql sql

如果我可以从 MySQL 数据库中的表中检索每个 id 的最新 name,如下所示:

SELECT n.id, n.name, n.date
    FROM $table AS n
INNER JOIN
(SELECT id, MAX(date) AS date
    FROM $table GROUP BY id)
AS max
USING (id, date);

如何从三个几乎相同的表(分别称为 $table、$table2、$table3)中检索最新的 name?它们都共享相同的列结构,并且从一个表中找到的 id 可能会也可能不会出现在其他两个表中。将其视为一个大表分成三个(但其中两个包含两个在本例中不相关的额外列)。 UNION 是最好的解决方案吗?如果是这样,有没有办法不用进行一英里长的查询就可以做到这一点?

<小时/>

约束:

不幸的是,id 不是一个自动递增的唯一整数

最佳答案

您可以使用union all。一个轻微的简化是 group_concat()/substring_index() 技巧:

select id, max(date) as date,
       substring_index(group_concat(name order by date desc), ',', '') as MostRecentName
from (select t.* from $table1 t union all
      select t.* from $table2 t union all
      select t.* from $table3
     ) t
group by id;

这确实做出了某些假设。 name 不能包含 ,(尽管更改分隔符很容易。此外,group_concat() 的中间结果不能超过一定的阈值(由用户可设置的系统参数确定)。

关于mysql - 从多个几乎相同的表中选择具有最大日期的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35044596/

相关文章:

Java REST Api(运行在tomcat上)-在客户端和服务器之间实现实时同步的最简单方法

sql - 将电话号码与单元格中的字符串分开 - 随机顺序

sql - MariaDB 创建 View 将 SELECT 更改为不同的(不正确的)查询

mysql - 此代码不打印查询 ID?

php - 字符编码和数据库

php - SQL 查询不更新 phpmyadmin 中的数据库

php - 数据不更新

php - 如何使用 PHP 将 SQL 查询结果存储在变量中?

php - 你如何使 codeigniter 加入?

sql - 查询列表中和不在列表中的项目