繁体   English   中英

获取每个ID列的最大值

[英]Get Max Value per ID column

在下面的查询中,我希望获取每个USERID的SEQNBR字段的最大值,其中该USERID不包含状态值为'CLE'的行。

我能够按每个USERID检索MAX SEQNBR行,但是它并不排除USERID所在的位置,因为它们在表中具有值“ CLE”的行。

由于最终将运行查询的环境的限制,我想避免在SELECT子句中使用公用表表达式(CTE)和子查询。

SELECT A.USERID, (CONVERT(CHAR(10),A.TEST_DT,121))AS 'TEST_DATE', A.TYPE_CD, 
 (CONVERT(CHAR(10),A.NEXT_TEST_DT,121))AS 'EXPIRE_DATE', B.STATUS1, 
 B.MGR_CLR, B.COMMENT, C.COMPANY, D.DESCR, E.DESCR, 
 F.LAST_NAME, F.FIRST_NAME, B.SEQNBR 
FROM ((((((TEST_PLACEMENT A 
LEFT OUTER JOIN  TEST_STATUS B ON  B.USERID = A.USERID AND B.TEST_DT 
= A.TEST_DT ) 
LEFT OUTER JOIN  (PS_JOB C INNER JOIN PS_EMPLMT_SRCH_QRY C1 ON (C.USERID = 
C1.USERID AND C.EMPL_RCD = C1.EMPL_RCD )) ON  
C.USERID = A.USERID ) 
LEFT OUTER JOIN  PS_JOBCODE_TBL D ON  D.JOBCODE = C.JOBCODE ) 
LEFT OUTER JOIN  PS_DEPARTMENT_VW E ON  E.DEPTID = C.DEPTID ) 
LEFT OUTER JOIN  (PS_JOB G INNER JOIN PS_EMPLMT_SRCH_QRY G1 ON (G.USERID = 
 G1.USERID AND G.EMPL_RCD = G1.EMPL_RCD )) ON  
 G.POSITION_NBR = C.REPORTS_TO AND G.EFFDT = (SELECT MAX( H.EFFDT) 
 FROM PS_JOB H, PS_EMPLMT_SRCH_QRY H1 
 WHERE H.USERID = H1.USERID 
 AND H.EMPL_RCD = H1.EMPL_RCD 
 AND ( G.POSITION_NBR = H.POSITION_NBR )) ) 
LEFT OUTER JOIN  (PS_NAMES F INNER JOIN PS_PERALL_SEC_QRY F1 ON (F.USERID = 
F1.USERID )) ON  F.USERID = A.USERID ) 
WHERE ( ( 
 C.JOB_INDICATOR = 'P' 
 AND B.SEQNBR = 
  (SELECT MAX(BB.SEQNBR) FROM TEST_STATUS BB
   WHERE  BB.USERID = B.USERID AND BB.STATUS1 <> 'CLE')
   --GROUP BY BB.STATUS1)
 AND G.EFFSEQ = 
    (SELECT MAX(G_ES.EFFSEQ) FROM PS_JOB G_ES 
    WHERE G.USERID = G_ES.USERID 
      AND G.EMPL_RCD = G_ES.EMPL_RCD 
      AND G.EFFDT = G_ES.EFFDT) )))

有问题的代码是:

  (AND B.SEQNBR = 
  (SELECT MAX(BB.SEQNBR) FROM TEST_STATUS BB
  WHERE  BB.USERID = B.USERID AND BB.STATUS1 <> 'CLE')
  --GROUP BY BB.STATUS1)) 

这是现在主查询中的示例数据:

在此处输入图片说明

这是期望的结果(基于上面的原始示例):

在此处输入图片说明

如您所见,已删除USERID 1和3,因为它们每个都具有状态为'CLE'的行,并且删除了具有SEQNBR 37的USERID 5的行,因为它不是该USERID的MAX SEQNBR(SEQNBR 38是用于USERID 5)。

您需要测试所有行

SELECT MAX(BB.SEQNBR) 
FROM TEST_STATUS BB
WHERE BB.USERID = B.USERID 
  and not exists (select 1 
                  from TEST_STATUS cc 
                  where ccUSERID = BB.USERID 
                  AND cc.STATUS1 = 'CLE')
And b.seqnbr=(Select max(bb.seqnbr) from     TEST_STATUS bb
Where bb.user_id not in (
Select t2.user_id from TEST_STATUS t2 where t2.status='CLE'
)
and bb.user_id=b.user_id
Group by bb.user_id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM