2015-06-20 65 views
0

我试图创建一个视图,它连接两个表并返回特定日期的相关地址详细信息。使用最新的地址记录创建一个视图

我有两个表:

员工:

ID (Primary key) 
Name 

EmployeeAddress:

ID (PK), (FK to Employee.ID) 
DateValidFrom (PK) 
AddressLine1 
AddressLine2 
PostCode 

如何加入两个一起,以获得员工的详细信息和地址截至某个日期?

回答

1

可以使用外做到这一点就需要遵守:

select 
    E.ID, 
    E.Name, 
    A.AddressLine1, 
    A.AddressLine2, 
    A.PostCode 
from 
    Employee E 
    outer apply (
    select top 1 
     A.AddressLine1, 
     A.AddressLine2, 
     A.PostCode 
    from 
     EmployeeAddress A 
    where 
     A.ID = E.ID and 
     A.DateValidFrom < getdate() 
    order by 
     A.DateValidFrom desc 
) A 
+0

哎呀,错的别名。不需要额外的连接,这已经足够了 –

+0

谢谢,完美。 –

1

一种方式做到这一点是使用找到的最新datevalidfrom每个ID查询和使用,作为一个派生表,你加入其他表有,像这样:

select * from employee e 
join employeeaddress ea on e.id = ea.id 
join (select id, max(datevalidfrom) as max_date from employeeaddress group by id) ea2 
    on ea.id = ea2.id and ea.datevalidfrom = ea2.max_date 

通过您限制查询的其余部分派生表与MAX(datevalidfrom)连接(这将让你的所有行)到最新。

并把它变成一个观点:

create view employee_latest_address as 
select e.id, e.name, ea.datevalidfrom, ea.addressline1, ea.addressline2, ea.postcode 
from employee e 
join employeeaddress ea on e.id = ea.id 
join (select id, max(datevalidfrom) max_date from employeeaddress group by id) ea2 
    on ea.id = ea2.id and ea.datevalidfrom = ea2.max_date 
相关问题