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年。谢谢。
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年。谢谢。
Select ID, date, opt
From Table2 As T2
Where date = (
Select Max(date)
From Table2 As T3
Where T3.ID = T.ID
)
感谢您的回答。 – NetWriter 2010-08-02 17:13:29
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
这里是没有子查询的解决方案:
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中有关于此类型解决方案的整章。
对不起,格式化的问题,这里是我的表: 表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