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

0

Мне нужно присоединиться к двум таблицам, которые описаны ниже:

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.

  • 2
    почему ты не публикуешь то, что у тебя есть?
Теги:
join
subquery

1 ответ

2
Лучший ответ

[Я хочу]... использовать последнюю доступную дату записи в качестве записи присоединения

Решите сначала, с производной таблицей. Предполагая, что 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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню