Отдельный запрос SQL по двум таблицам

Я хотел бы найти отдельные отзывы (по годам) для каждого сотрудника, показывающие только самый последний отзыв (по годам)

Employee List                 Employee Reviews
Number | Employee Name        GUID | Number | Year
1234     John                 x5848  1234     2016
4526     Jim                  xd565  1234     2015
1123     Pam                  cr484  1123     2016

Нужен результат:

Number | Name | GUID | Year
1234     John   x5848  2016
1123     Pam    cr484  2016

Я не могу понять, как написать SQL-запрос, который вернул бы мне вышеуказанные результаты. У кого-нибудь есть опыт работы с таким запросом или подобным?


person bbadger16    schedule 23.05.2016    source источник


Ответы (1)


Вы можете ранжировать свои записи, присваивая им номера строк:

select 
  guid, number, year, 
  row_number() over (partition by number order by year desc) as rn
from employee_reviews;

Это дает самые новые записи (order by year desc) для каждого сотрудника (partition by number) номер строки 1. Следовательно:

select emp.number, emp.name, rev.guid, rev.year
from employee amp
join
(
  select 
    guid, number, year, 
    row_number() over (partition by number order by year desc) as rn
  from employee_reviews
) rev on rev.number = emp.number and rev.rn = 1;
person Thorsten Kettner    schedule 23.05.2016