mysql join哪里的值差异最小?

时间:2012-06-12 08:11:58

标签: mysql join left-join minimum

原则上我有2个表T1和T2,每个表包含一个日期字段,我们称之为日期:

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和{{1}}(如果T2中没有这样的行,则为null)

1 个答案:

答案 0 :(得分: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)