原则上我有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)
答案 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)