2015-11-26 2 views
0

У меня есть две таблицы EMP & Emp_DetailsОптимизировать вложенными для запроса петли

Emp -> EmpId, EmpName 
Emp_Details -> EmpDetailId, Domain, Year, Date_of_record 

Каждый сотрудник имеет много областей, где измеряется их Perfomance, и она может быть измерена более чем один раз в год.

Так emp1 может иметь более одного перекодирует в Emp_Details для Domain1 за 2015 год

Теперь я хочу, чтобы получать последние записи за домен в год для работника.

В настоящее время я получаю выбор из двух вложенных циклов FOR в Java, то есть одного цикла FOR для каждого коэффициента и другого внутреннего цикла FOR для каждого года, получающего последнюю Date_of_record.

Как его оптимизировать? Я использую PL/SQL.

+0

Вы можете хотя бы опубликовать фрагмент кода? – Vance

+0

@Vance жаль из-за какой-то проприетарной проблемы, я не смогу опубликовать код. Мне очень жаль. – reiley

+0

Нет столбцов EmpId? – jarlh

ответ

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 
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; 
Смежные вопросы