Объединение таблиц на основе коррелированного подзапроса, SQL

#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)