如果我可以从 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/