2010-08-02 82 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中有關於此類型解決方案的整章。