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