SQL仅选择列中的唯一值

问题描述 投票:0回答:1

我有一个从记录(员工ID)可以有多行数据的表中提取的以下查询。因此,我有一些最高(最大)EXAM_DATE的行。我已将MAX函数添加到SELECT语句中,但是我仍在检索每个empl有2个或更多日期的行。这一定是我忽略的事情。任何帮助表示赞赏。

SQL查询:

SELECT A.EMPLID, A.BUSINESS_TITLE, A.DEPTID, A.LOCATION, A.LAST_NAME, 
A.FIRST_NAME, A.MIDDLE_NAME, 
MAX(CONVERT(CHAR(10),D.EXAM_DT,121))AS EXAM_DATE, D.EXAM_TYPE_CD, 
(CONVERT(CHAR(10),D.GH_EXPIRE_DATE,121)) AS EXPIRE_DATE, AA.NAME AS 
Manager_Name

FROM ((PS_EMPLOYEES A INNER JOIN PS_EMPLMT_SRCH_QRY A1 ON (A.EMPLID = 
A1.EMPLID AND A.EMPL_RCD = A1.EMPL_RCD AND  A1.OPRID = 'HD065' )) 
   LEFT OUTER JOIN  PS_GHS_HS_PPDSCRN D ON A.EMPLID = D.EMPLID)
 --LEFT OUTER JOIN PS_GHS_REPORTS_TO H ON A.EMPLID = H.EMPLID
   LEFT OUTER JOIN PS_EMPLOYEES AA ON AA.POSITION_NBR = A.REPORTS_TO 
     AND (( AA.EFFDT = 
     (SELECT MAX(A_ED.EFFDT) FROM PS_EMPLOYEES A_ED 
      WHERE AA.POSITION_NBR = A_ED.POSITION_NBR 
      AND A_ED.EFFDT <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10)) ))
   WHERE ( ( A.EFFDT = 
    (SELECT MAX(A_ED.EFFDT) FROM PS_EMPLOYEES A_ED 
    WHERE A.EMPLID = A_ED.EMPLID 
      AND A.EMPL_RCD = A_ED.EMPL_RCD 
      AND A_ED.EFFDT <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10)) 
   AND A.EFFSEQ = 
    (SELECT MAX(A_ES.EFFSEQ) FROM PS_EMPLOYEES A_ES 
    WHERE A.EMPLID = A_ES.EMPLID 
      AND A.EMPL_RCD = A_ES.EMPL_RCD 
      AND A.EFFDT = A_ES.EFFDT) 

      AND D.EXAM_TYPE_CD = 'PPD'))
      AND A.EMPL_STATUS = 'A' 

--AND NOT EXISTS (SELECT D.EMPLID, COUNT(*) AS 'TotalOccur' FROM PS_GHS_HS_PPDSCRN D GROUP BY D.EMPLID HAVING COUNT(*) > 1)

 GROUP BY A.EMPLID, A.BUSINESS_TITLE, A.DEPTID, A.LOCATION, A.LAST_NAME, 
 A.FIRST_NAME, A.MIDDLE_NAME, D.EXAM_TYPE_CD, D.GH_EXPIRE_DATE, AA.NAME
 ORDER BY 5

我尝试使用NOT EXISTS的注释代码运行它,但是当我运行它时,我没有检索任何结果。

样本输出:

enter image description here

sql
1个回答
0
投票

WHERE中的MAX应该没问题。

您的EXPIRE_DATE在两个记录之间也不同,并且由于EXPIRE_DATE包含在GROUP BY中,它将导致“重复”。

© www.soinside.com 2019 - 2024. All rights reserved.