开发者

select a distinct row in left join

开发者 https://www.devze.com 2023-01-10 02:25 出处:网络
Table 1 ID 1 2 3 Table 2 IDdateopt 11/1/101 11/2/100 21/1/101 I Want IDdateopt 11/2/100 21/1/101 开发者_如何学Python

Table 1

ID
1
2
3

Table 2

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

I Want

ID    date    opt
1    1/2/10    0
2    1/1/10    1
开发者_如何学Python

How do I join these 2 tables? Just match all the ID's in table 1 with their most recent opt in table 2. Without partitions, please. I'm in sql 2005. Thanks.


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


Here's the solution without subqueries:

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

You could get duplicates if you have two entries in table 2 with the same "latest" date and ID. However, you could add additional conditions to handle two entries with the same "latest" date. Also, you will get NULL values for date and opt if there is no corresponding record in table 2.

There is a whole chapter about this type of solution in the book SQL Antipatterns.


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
0

精彩评论

暂无评论...
验证码 换一张
取 消