Мне нужна помощь с запросом MySQL, над которым я работаю.У меня есть данные следующим образом.
Таблица 1
id date1 text number
---|------------|--------|-------
1 | 2012-12-12 | hi | 399
2 | 2011-11-11 | so | 399
5 | 2010-10-10 | what | 555
3 | 2009-09-09 | bye | 300
4 | 2008-08-08 | you | 300
Таблица 2
id number date2 ref
---|--------|------------|----
1 | 399 | 2012-06-06 | 40
2 | 399 | 2011-06-06 | 50
5 | 555 | 2011-03-03 | 60
Для каждой строки в Таблице 1 я хочу получить ноль или одно значение refиз таблицы 2. Должна быть строка в результате для каждой строки в таблице 1. Столбец чисел не уникален ни для одной из таблиц, поэтому объединение должно быть выполнено с использованием столбцов date1 и date2, где date2 - наибольшее значение длячисло без превышения даты1 для этого числа.
Желаемый результат из вышеприведенного примера будет таким:
date1 text number ref
------------|--------|--------|-----
2012-12-12 | hi | 399 | 40
2011-11-11 | so | 399 | 50
2010-10-10 | what | 555 | null
2009-09-09 | bye | 300 | null
2008-08-08 | you | 300 | null
Вы можете видеть в первой строке результата, было выбрано значение 40потому что в таблице 2 запись с ref = 40 имела дату2, которая была меньше даты1, и самую высокую дату, которая соответствовала этому условию.Во второй строке результата было выбрано значение ref 50, поскольку в таблице 2 запись с ref = 50 имела дату2, которая была меньше даты1, и самую высокую дату, которая соответствовала этому условию.Остальные результаты имеют нулевые ссылки, потому что date1 всегда меньше или соответствующее число не существует в таблице 2.
Я дошел до определенного момента, но застрял.На данный момент у меня есть следующий запрос:
SELECT date1, text, number, ref
FROM table1
LEFT JOIN (
SELECT *
FROM (
SELECT *
FROM table2
WHERE date2 <= '2012-12-12'
ORDER BY date2 DESC
) tmp
GROUP BY msisdn
) tmp ON table1.number = table2.number;
Проблема в том, что жестко закодированная дата не подходит, она должна основываться на date1, но я не могу использовать date1, потому что она ввнешний запрос.Есть ли способ, которым я могу сделать эту работу?