mysql连接值之间的差异最小?

标签 mysql join left-join minimum

原则上我有 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/

相关文章:

mysql - 创建列允许 NULL 但默认值设置为 NOT NULL

mysql - phpMyAdmin (MySQL) 中对一个字段进行多次检查

mysql - mysql如何连接两个表

mysql - 交换两个不同表的两列的值

php - MySQL从多个表中选择

php - 确保 http(s) 请求来 self 的 iOS 应用

mysql - 如何在 "Unknown column ' 中获取 1054, 'field list' CarrierID_id' 错误

sql - Informix 多重连接

mysql - SQL 语法错误(访问冲突 : 1064)

mysql - 如何使用 LEFT OUTER JOIN 来识别供应商缺少的产品?