2010-08-02 75 views
1

表1选择不同的行中左连接

ID 
1 
2 
3 

表2

ID date opt 
1 1/1/10 1 
1 1/2/10 0 
2 1/1/10 1 

我想

ID date opt 
1 1/2/10 0 
2 1/1/10 1 

如何加入这两个表?只需将表1中的所有ID与其最近的选项匹配在表2中即可。 请勿使用分区。我在SQL 2005年。谢谢。

+0

对不起,格式化的问题,这里是我的表: 表1 ID 表2 ID日期选择 1 1/1/10 1 1 1/2/10 0 2 1/1/10 1 我需要 ID date date 1 1/2/10 0 2 1/1/10 1 – NetWriter 2010-08-02 16:45:38

回答

2
Select ID, date, opt 
From Table2 As T2 
Where date = (
      Select Max(date) 
      From Table2 As T3 
      Where T3.ID = T.ID 
      ) 
+0

感谢您的回答。 – NetWriter 2010-08-02 17:13:29

0
select t1.ID, t2.date, t2.opt 
from (
    select ID, max(date) as MaxDate 
    from Table2 
    group by ID 
) t2m 
inner join Table2 t2 on t2m.ID = t2.ID and t2.MaxDate = t2.date 
inner join Table1 t1 on t2.ID = t1.ID 
1

这里是没有子查询的解决方案:

SELECT t1.ID, t2.date, t2.opt 
FROM Table1 t1 
LEFT JOIN Table2 t2 
    ON t2.ID = t1.ID 
LEFT JOIN Table2 t3 
    ON t3.ID = t1.ID AND t3.date > t2.date 
WHERE t3.date IS NULL 

你可以得到重复,如果你有表2中使用相同的“最新”日期和ID两个条目。但是,您可以添加附加条件来处理具有相同“最新”日期的两个条目。另外,如果表2中没有相应的记录,则您将获得日期的空值。

在本书SQL Antipatterns中有关于此类型解决方案的整章。