2015-04-02 37 views
2

我有4個表格(比如說A,B,C和D)都帶有'date'列。我需要在所有四個表格中找到最常見的日期值。也就是說,所有四個表格中存在的最大值。我怎樣才能做到這一點?現在,我正在尋找所有四個表的MAX日期值的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年3月28日,但隨後我意識到有些表格可能根本沒有這個日期。我實際想要得到的日期是2015年3月27日。

+0

請顯示sql的y你說的是失敗以及例子和預期的數據。 – paqogomez 2015-04-02 20:41:08

+1

如果你只想要最大日期,你可不可以從每張表中選擇每個日期,將它們結合在一起並獲得最大值? – paqogomez 2015-04-02 20:42:05

+1

@paqogomez。 。 。因爲OP不想要最大日期。 OP要求出現在*全部四個*表中的最大日期。 – 2015-04-02 21:10:29

回答

3

這裏有一個方法:

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; 

以下版本可能會執行好一點,特別是如果你有date指數在每個表中:

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; 
1

你需要得到一個交叉點所有日期值跨4個獨立的表。然後,選擇這些值的MAX

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))) 

SQL Fiddle Demo here