แบบสอบถาม 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