sql, выбор последнего завершенного couse с использованием max (имя столбца) не работает - PullRequest
0 голосов
/ 21 июля 2010

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

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

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

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

1 Ответ

0 голосов
/ 21 июля 2010
 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.

...