2010-07-21 52 views
0

每年都有員工參加強制課程。我需要得到一份員工名單和他們最近完成的課程,例如FS(消防安全)。以下是我的查詢。問題在於它顯示了一些員工完成的兩門或三門課程。sql,使用max(列名稱)不起作用來選擇最新完成的couse

試圖對這些員工的記錄進行故障排除時,它會顯示最近完成的課程,當我僅在員工ID上僅顯式選擇一名員工時。我究竟做錯了什麼?

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

對於什麼數據庫? – 2010-07-21 18:17:51

回答

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 2010-07-21 20:04:25