所有, 下面的数据集从三个单独的表中提取 WONO、EPLSNM 和 SQNO1。我需要的是一个 db2 sql 查询,它将返回每个唯一 WONO 的员工姓名 (EPLSNM),最大 SQNO1。
WONO EPLSNM SQNO1
CA04269 WILLIAMS, BILLY W 12
CA04269 WILLIAMS, BILLY W 12
CA04269 WILLIAMS, BILLY W 12
CA04269 WILLIAMS, BILLY W 12
CA04270 FAIRCLOTH, MARK E 22
CA04270 FAIRCLOTH, MARK E 22
CA04270 FAIRCLOTH, MARK E 22
CA04270 FAIRCLOTH, MARK E 22
CA04270 FAIRCLOTH, MARK E 23
CA04270 FAIRCLOTH, MARK E 23
CA04270 FAIRCLOTH, MARK E 23
CA04270 FAIRCLOTH, MARK E 23
如果可能的话,我希望看到以下内容:
WONO EPLSNM SQNO1
CA04269 WILLIAMS, BILLY W 12
CA04270 FAIRCLOTH, MARK E 23
我只需要 2 行数据,而我需要 12 行数据。
非常感谢。
这是我的代码:
SELECT DISTINCT WOHDR.wono,EMP.eplsnm,max(WOLBR.sqno1) AS SQNO,WOLBR.cgcd,CASE WHEN WOHDR.opndt8 IN (' ') THEN DATE('1900-01-01') WHEN WOHDR.opndt8 IS NULL THEN DATE('1900-01-01') ELSE Date(Cast(SUBSTRING(WOHDR.opndt8,1,4) as char(4)) ||'-'|| Cast(SUBSTRING(WOHDR.opndt8,5,2) as char(2)) ||'-'|| Cast(SUBSTRING(WOHDR.opndt8,7,2) as char(2))) END AS OpenDate,CASE WHEN WOHDR.prmdt8 IN (' ') THEN DATE('1900-01-01') WHEN WOHDR.prmdt8 IS NULL THEN DATE('1900-01-01') ELSE Date(Cast(SUBSTRING(WOHDR.prmdt8,1,4) as char(4)) ||'-'|| Cast(SUBSTRING(WOHDR.prmdt8,5,2) as char(2)) ||'-'|| Cast(SUBSTRING(WOHDR.prmdt8,7,2) as char(2))) END AS PromisedDate,WOHDR.divi AS Division, WOHDR.cunm AS CustName, WOHDR.eqmfmd AS Model,WOHDR.stno AS StoreNo,RPT.ds5 AS StoreName,WOHDR.acti
FROM libd09.wophdrs0 WOHDR
JOIN libd09.wopsegs0 WOSEG ON (WOHDR.wono = WOSEG.wono)
JOIN libd09.fnlrlvl0 RPT ON (WOHDR.stno = RPT.st4 AND WOHDR.stno = WOSEG.stn1)
LEFT JOIN libd09.cipname0 NME ON (NME.cuno = WOHDR.cuno)
LEFT JOIN libd09.woplabr0 WOLBR ON (WOHDR.wono = WOLBR.wono)
LEFT JOIN libd09.wopempf0 EMP ON (EMP.epidno = WOLBR.epidno AND WOHDR.stno = EMP.stn1)
WHERE WOHDR.opndt8 BETWEEN 20130101 AND YEAR(CURRENT DATE) * 10000 + MONTH(CURRENT DATE) * 100 + DAY(CURRENT DATE)
AND WOHDR.divi = 'G'
AND NME.cuno NOT LIKE ('I%')
AND RPT.rplvl = ' '
AND WOHDR.cunm NOT IN ('ACCRUED VACATION TIME','ACCRUED VACATION','SICK TIME','SICK PAY')
AND WOHDR.acti IN ('O','C')
-- AND DATE(Cast(SUBSTRING(WOLBR.docdt8,1,4) as char(4)) ||'-'|| Cast(SUBSTRING(WOLBR.docdt8,5,2) as char(2)) ||'-'|| Cast(SUBSTRING(WOLBR.docdt8,7,2) as char(2))) = DATE(RTRIM(CHAR(WOHDR.llbjd8)))
GROUP BY
WOHDR.wono,EMP.eplsnm,WOLBR.cgcd,WOHDR.opndt8,WOHDR.divi,WOHDR.cunm, WOHDR.eqmfmd,WOSEG.wosgno,WOHDR.stno,WOHDR.prmdt8,RPT.ds5,WOHDR.acti
最佳答案
您可以将其作为聚合查询来执行:
SELECT WONO, EPLSNM, MAX(SQNO1)
FROM whatever w
GROUP BY WONO, EPLSNM;
编辑:
(基于评论中的澄清)
您可以使用窗口/分析函数:
select wono, eplsnm, sqn01
from (select w.*, row_number() over (partition by wono order by sqno1 desc) as seqnum
from whatever w
) w
where seqnum = 1;
关于sql - DB2 和 SQL-如何返回特定字段中的最大值,以便每行只显示一条记录;从多个表中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22490829/