2012-06-12 37 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