Мне нужно присоединиться к двум таблицам, которые описаны ниже:
Table1:
ID Date Info1
1 1/29/2011 i10
1 1/30/2011 i11
Table2:
ID Date Info2
1 1/31/2011 i2
Я хотел бы оставить записи в таблице 2, идентифицированные по идентификатору, месяцу, году, по таблице, указанной в таблице 1, по идентификатору, месяцу, году, но использовать последнюю доступную дату записи в качестве записи присоединения. Так, например, в приведенных выше данных я бы присоединился к записи в Таблице 2 ко второй записи в Таблице 1, потому что они соответствуют ID, Месяцу, Году, а запись 2 из Таблицы 1 имеет наибольший доступный день для этого (ID, Месяц, Год). Правильный результат:
ID Дата Info1 Info2
1 1/30/2011 i11 i2
Код SQL, который я придумываю до сих пор, довольно запутан. Пожалуйста, предложите что-нибудь. Я использую MySQL.
[Я хочу]... использовать последнюю доступную дату записи в качестве записи присоединения
Решите сначала, с производной таблицей. Предполагая, что ID, Date
уникален, вы можете легко группировать по идентификатору и принимать дату MAX.
SELECT
T1.*,
T2.*
FROM Table1 as T1
JOIN (
SELECT
ID, MAX(Date) as Date
FROM Table1
GROUP BY
ID
) as Last ON
T1.ID = Last.ID
AND T1.Date = Last.Date
LEFT OUTER JOIN Table2 as T2 ON
T1.ID = Last.ID
AND MONTH(T1.Date) = MONTH(T2.Date)
AND YEAR(T1.Date) = YEAR(T2.Date)