表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 :(得分:2)
Select ID, date, opt
From Table2 As T2
Where date = (
Select Max(date)
From Table2 As T3
Where T3.ID = T.ID
)
答案 1 :(得分: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中没有相应的记录,您将获得date和opt的NULL值。
在SQL Antipatterns一书中,有一整章关于此类解决方案。
答案 2 :(得分: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