基于相关子查询,SQL连接表

时间:2011-10-27 21:14:15

标签: mysql sql join subquery

我需要加入两个如下所述的表:

Table1:
ID  Date       Info1
1   1/29/2011     i10
1   1/30/2011     i11


Table2:
ID  Date       Info2
1    1/31/2011   i2

我想将ID,月,年标识表2中的记录加入表1中由相同ID,月,年标识的记录,但使用最后一个可用记录日期作为加入记录。因此,例如,在上面的数据中,我将表2中的记录加入表1中的第二条记录,因为它们在ID,月,年和表1的记录2中匹配具有最大的可用日期(ID,月,年)组合。正确的结果是:

  

ID日期Info1 Info2

     

1 1/30/2011 i11 i2

到目前为止,我提出的SQL代码非常令人费解。请提出建议。我正在使用MySQL。

1 个答案:

答案 0 :(得分:2)

  

[我想] ...使用最后一个可用的记录日期作为加入记录

首先使用派生表解决这个问题。假设ID, Date是唯一的,那么您可以轻松按ID分组并获取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)