Mysql 获取跨表的列中的最大公共值
我有4个表,分别是A、B、C和D,都有“date”列。我需要在所有四个表中找到最大的通用日期值。即所有四个表中存在的最大日期值。我该怎么做 现在,我只需要找到所有四个表的maxdate值中的MIN,但是如果MIN存在于一个表中,而不存在于第二个表中,那么这就失败了 下面是一个让事情更清楚的例子:Mysql 获取跨表的列中的最大公共值,mysql,sql,Mysql,Sql,我有4个表,分别是A、B、C和D,都有“date”列。我需要在所有四个表中找到最大的通用日期值。即所有四个表中存在的最大日期值。我该怎么做 现在,我只需要找到所有四个表的maxdate值中的MIN,但是如果MIN存在于一个表中,而不存在于第二个表中,那么这就失败了 下面是一个让事情更清楚的例子: A.date ------ 2015-03-31 2015-03-30 2015-03-29 2015-03-27 B.date ------ 2015-03-30 2015-03-29 2015-0
A.date
------
2015-03-31
2015-03-30
2015-03-29
2015-03-27
B.date
------
2015-03-30
2015-03-29
2015-03-28
2015-03-27
C.date
------
2015-03-29
2015-03-27
2015-03-26
2015-03-25
D.date
------
2015-03-28
2015-03-27
2015-03-26
2015-03-25
为了找到最常见的日期,我所做的是:
SELECT MIN(max_date) FROM (
SELECT MAX(date) AS max_date FROM A
UNION
SELECT MAX(date) AS max_date FROM B
UNION
SELECT MAX(date) AS max_date FROM C
UNION
SELECT MAX(date) AS max_date FROM D
) T;
这给了我2015-03-28,但后来我意识到有些表格可能根本没有这个日期。我实际想要得到的日期是2015-03-27。您需要得到4个单独表格中所有日期值的交集。然后,选择这些值的最大值:
SELECT MAX(date)
FROM A
WHERE date IN (
SELECT date
FROM B
WHERE date IN (
SELECT date
FROM C
WHERE date IN (
SELECT date
FROM D)))
这里有一种方法:
select date
from (select date, 'a' as which from a union all
select date, 'b' as which from b union all
select date, 'c' as which from c union all
select date, 'd' as which from d
) x
group by date
having count(distinct which) = 4
order by date desc
limit 1;
以下版本的性能可能会更好一些,尤其是在每个表中都有日期索引的情况下:
select date
from (select distinct date, 'a' as which from a union all
select distinct date, 'b' as which from b union all
select distinct date, 'c' as which from c union all
select distinct date, 'd' as which from d
) x
group by date
having count(*) = 4
order by date desc
limit 1;
请显示您所说的失败的sql以及示例和预期数据。如果您只需要最大日期,您能否从每个表中选择每个日期,将它们合并在一起并获得最大值?@paqogomez。因为OP不需要最长日期。OP需要显示在所有四个表中的最大日期。