2010-07-21 1 views
0

Каждый год сотрудник принимает обязательные курсы. Мне нужно получить список сотрудников и их последний законченный курс, например FS (пожарная безопасность). Ниже мой запрос. Проблема заключается в том, что у некоторых сотрудников есть два или три завершенных курса.sql, выбрав самую последнюю завершенную couse с использованием max (название столбца), не работает

Попытка устранения неполадок записи этих сотрудников показывает последний завершенный курс, когда я выбираю только одного сотрудника явно на идентификаторе сотрудника. Что я делаю не так?

Select 
h.empno, 
p.p_lname, 
p.p_fname, 
h.classid, 
h.course, 
h.certcode, 
h.startdate, 
h.enddate, 
h.enrstat 
from dbo.nemphist h 
join dbo.hrpersnl p 
    on h.empno=p.p_empno 
where h.course='FS'and 
--  p.p_empno='99999123'and 
     p.p_active<>'T' and 
     p.p_company='XXX'and 
     h.enrstat='COMP' and 
     h.startdate in 
    (Select max(startdate) 
    from dbo.nemphist h 
    join dbo.hrpersnl p 
    on h.empno=p.p_empno 
--   h.company=p.p_company 
    where h.course='FS'and 
--     p.p_empno=''99999123''and 
     p.p_active<>'T' and 
     p.p_company='XXX' and 
     h.enrstat='COMP' 
    Group by h.empno) 
order by p.p_lname 

Я исправил свой запрос.

+0

Для какой базы данных? –

ответ

0
h.startdate in 
    (Select h.empno, max(startdate) 
    from dbo.nemphist h 
    join dbo.hrpersnl p 
    on h.empno=p.p_empno 
--   h.company=p.p_company 
    where h.course='CPR/FA'and 
--     p.p_empno=''99999123''and 
     p.p_active<>'T' and 
     p.p_company='XXX' and 
     h.enrstat='COMP' 
    Group by h.empno) 

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

Сделайте производную таблицу и присоединитесь к startdte и empno.

+0

производная таблица и присоединиться к дате начала и empno. Большое спасибо. – Irene