SQL: Как получить последнюю запись - PullRequest
0 голосов
/ 25 мая 2020

Мне нужна помощь. Как мне получить самую последнюю запись для двух отдельных таблиц? Таблица 1 - это таблица записей сотрудников с номером и именем сотрудника в ней. Таблица 2 - это таблица адресов с номером сотрудника, адресом 1, адресом 2, округом, городом, страной, почтовым индексом и датой вступления в силу.

Как мне получить последние данные из двух таблиц на основе большинства недавняя дата?

К сожалению, мой SQL не работает. Как-то я получаю ошибку «Неверный синтаксис рядом с 'T3'». Я не мог понять, что это за неправильный синтаксис. Пожалуйста помоги. Спасибо!

SELECT  T1.EmpNumber,
        T1.EmpName,
        T2.City,
        T2.Country,
        T2.EffDate

FROM    EmployeeTable T1
        LEFT OUTER JOIN AddressTable T2
        ON T1.EmpNumber = T2.EmpNumber
        AND T2.EffDate = (
                 SELECT EmpNumber,
                        MAX (EffDate) as RecentDate
                 FROM AddressTable
                 GROUP BY EmpNumber) T3 ON T1.EmpNumber = T3.EmpNumber AND T2.EffDate = T3.RecentDate        

1 Ответ

1 голос
/ 25 мая 2020

Переносимым решением этой проблемы с наибольшим числом n на группу является фильтрация с помощью подзапроса - это также соответствует духу вашей попытки:

select e.employee_name, a.*
from  EmployeeTable e
inner join AddressTable a on a.employee_number = e.employee_number
where a.effective_date = (
    select max(a1.effective_date) 
    from AddressTable a1 
    where a1.employee_number = e.employee_number
)

Если вы хотите разрешить сотрудникам, у которых есть без адресов, тогда вы можете поместить фильтрацию в предложение on в left join:

select e.employee_name, a.*
from  EmployeeTable e
left join AddressTable a 
    on  a.employee_number = e.employee_number
    and a.effective_date = (
        select max(a1.effective_date) 
        from AddressTable a1 
        where a1.employee_number = e.employee_number
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...