2012-06-12 4 views
1

В принципе у меня есть 2 таблицы Т1 и Т2, каждый из которых содержит поле даты-, позволяет назвать его дату:mysql join, где разница между значениями минимальна?

T1: date | somekey | data ... 
T2: date | somekey | data ... 

Хочу (left)join T1 and T2, таким образом, что результат имеет все строки из T1.

Теперь для каждой строки T1 мне нужны значения из строки (ровно один) Т2 присоединился где ABS(DATEDIFF(T1.date,T2.date)) минимальна и T1.somekey=T2.somekey (или нуль в случае, если нет такой строки в T2)

+0

Что вы имеете в виду с «минимальной разницей» – akalucas

+0

, насколько поскольку я знаю, что DATEDIFF дает целочисленное значение, представляющее разницу в днях между двумя датами. если в T2 есть строки, соответствующие условию, должна быть одна конкретная строка, где эта разница минимальна. Мои извинения, я не мог выразить это более ясно. – IARI

ответ

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 

EDIT:

Я думаю, что я получаю то, что вы хотите сделать, но подзапросы путь здесь:

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) 
+0

В этом проблема: минимальная величина не является постоянной. – IARI

+0

@IARI Итак, вы хотите выбрать строку с наименьшим DATEDIFF? Мне все еще не совсем ясно, что вы пытаетесь выполнить. – akalucas

+0

@IARI Отредактировал свой ответ. – fancyPants

Смежные вопросы