Mysql 获取跨表的列中的最大公共值

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

我有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-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需要显示在所有四个表中的最大日期。