簡體   English   中英

在表中的列中獲得最大的共同價值

[英]Get greatest common value in a column across tables

我有4個表(例如A,B,C和D),均帶有“日期”列。 我需要在所有四個表中找到最大的公共日期值。 也就是說,所有四個表中都存在日期的最大值。 我怎樣才能做到這一點?

現在,我正在尋找所有四個表的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-03-27。

這是一種方法:

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;

您需要在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演示在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM