#mysql #sql #join #subquery
#mysql #sql #Присоединиться #подзапрос
Вопрос:
Мне нужно объединить две таблицы, которые описаны ниже:
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, потому что они совпадают по идентификатору, месяцу, году, а запись 2 таблицы 1 имеет наибольший доступный день для этой комбинации (идентификатор, месяц, год). Правильный результат:
ID Дата Info1 Info2
1 1/30/2011 i11 i2
Код SQL, который я придумываю до сих пор, довольно запутанный. Пожалуйста, предложите что-нибудь. Я использую MySQL.
Комментарии:
1. почему бы вам не опубликовать то, что у вас есть?
Ответ №1:
[Я хочу] …используйте последнюю доступную дату записи в качестве записи объединения
Сначала решите это с помощью производной таблицы. Предполагая, что ID, Date
это уникально, тогда вы можете легко сгруппировать по идентификатору и взять МАКСИМАЛЬНУЮ дату.
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)