我有两张桌子 Emp &的 Emp_Details
Emp -> EmpId, EmpName
Emp_Details -> EmpDetailId, Domain, Year, Date_of_record
每位员工都有很多领域,他们的绩效是衡量的,每年可以测量一次以上。
因此,emp1在2015年的Domain1的Emp_Details中可以有多个重新编码。
现在我想为员工每年获取每个域的最新记录。
目前我正在Java中使用两个嵌套的FOR循环,即每个因子一个FOR循环,每年获取最新Date_of_record的另一个内部FOR循环。
我该如何优化它?我正在使用PL / SQL。
答案 0 :(得分:1)
执行GROUP BY
,使用MAX
查找该年份的最新日期(针对每个群组)。
select e.EmpName, ed.Domain, ed.Year, MAX(ed.Date_of_record)
from Emp e
left join Emp_Details ed ON e.EmpId = ed.EmpId
group by e.EmpName, ed.Domain, ed.Year
答案 1 :(得分:0)
您好,您也可以尝试使用分析功能来满足您的要求。如果有帮助,请告诉我
SELECT a.empid,
a.empname,
a.domain,
a.dor
FROM
(SELECT e.EMPID,
e.EMPNAME,
ed.DOMAIN,
ed.Date_of_record dor,
ROW_NUMBER() OVER(PARTITION BY ed.EMPID,ed.DOMAIN ORDER BY ed.Date_of_record DESC) rnk
FROM emp e,
emp_details ed
WHERE ed.empid = e.empid
)a
WHERE a.rnk = 1;