原则上我有 2 个表 T1 和 T2,每个表都包含一个日期字段,我们称之为日期:
T1: date | somekey | data ...
T2: date | somekey | data ...
我想(左)连接 T1 和 T2
,以便结果包含 T1 中的所有行。
现在,对于 T1 的每一行,我需要 T2 的(恰好一个)行中的值,其中 ABS(DATEDIFF(T1.date,T2.date))
是最小的并且 T1.somekey=T2.somekey
(如果 T2 中没有这样的行,则为 null)
最佳答案
不要在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)
关于mysql连接值之间的差异最小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10992769/