2

原则上,我有 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(如果 T2 中没有这样的行,则为 null)

4

1 回答 1

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)
于 2012-06-12T08:27:34.573 回答