2015-06-20 2 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 для каждого идентификатора и использовать его в качестве производной таблицы, что вы присоединиться к другие таблицы с, что-то вроде этого:

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 

Присоединившись с максимальной (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 
Смежные вопросы