优化嵌套for循环查询

时间:2015-11-26 11:45:07

标签: sql oracle

我有两张桌子 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。

2 个答案:

答案 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;