2012-06-12 68 views
1

原則我有2個表T1和T2,每個都包含一個日期字段,讓稱之爲日期:mysql加入的值之間的差異是最小的?

T1: date | somekey | data ... 
T2: date | somekey | data ... 

(left)join T1 and T2,使得結果具有從T1的所有行。

現在對於從T1每一行我需要從T2的(僅僅一個)排連接,其中ABS(DATEDIFF(T1.date,T2.date))最小並且T1.somekey=T2.somekey的值(或空的情況下,有在T2沒有這樣的行)

+0

你是什麼意思與「最小差異」 – akalucas

+0

遠因爲我知道DATEDIFF會產生一個整數值,代表兩個日期之間的差異。如果T2中有與條件匹配的行,則必須有一個特定的行,其差異最小。我的道歉,我無法更清楚地表達。 – IARI

回答

0

不要在JOIN子句中執行,只需將它放在WHERE子句中。

SELECT 
* 
FROM 
T1 
LEFT JOIN T2 ON T1.somekey = T2.somekey 
WHERE 
ABS(DATEDIFF(T1.date,T2.date)) = 1 /*or whatever "minimal" means for you*/ 
/*or like this:*/    < $yourMinimalValue 

編輯:

我覺得我得到你想要做什麼,但子查詢是去這裏的路:

SELECT 
* 
FROM 
T1 
LEFT JOIN T2 ON T1.somekey = T2.somekey 
WHERE 
ABS(DATEDIFF(T1.date,T2.date)) = (SELECT MIN(DATEDIFF(TT1.date, TT2.date)) FROM T1 AS TT1 LEFT JOIN T2 AS TT2 ON TT1.somekey = TT2.somekey) 
+0

這就是問題:最小值不是一個常數值。 – IARI

+0

@IARI所以你想選擇最小的DATEDIFF行?對於我想要完成的事情,我還不完全清楚。 – akalucas

+0

@IARI編輯我的答案。 – fancyPants