为一列复杂查询(oracle)选择distinct
这是一个包含as、multiple join、where、counts、max等的查询 我正在为一家血液中心做一份报告,报告将显示去年每位献血者损失了多少血液和血浆。我算出了所有其他的,但它基本上提取了去年每个捐赠者的所有名单。我只想展示最新的。我有MAX on date,等等,并尝试在捐赠者ID上使用Distinct,甚至只根据捐赠者ID进行分组(它不允许我,错误) 我正在使用Oracle为一列复杂查询(oracle)选择distinct,oracle,Oracle,这是一个包含as、multiple join、where、counts、max等的查询 我正在为一家血液中心做一份报告,报告将显示去年每位献血者损失了多少血液和血浆。我算出了所有其他的,但它基本上提取了去年每个捐赠者的所有名单。我只想展示最新的。我有MAX on date,等等,并尝试在捐赠者ID上使用Distinct,甚至只根据捐赠者ID进行分组(它不允许我,错误) 我正在使用Oracle with DonorBloodLoss AS ( SELECT dv.DONOR_ID, SUM(dd
with DonorBloodLoss AS ( SELECT dv.DONOR_ID, SUM(ddlrbc.COLLECTION_AMOUNT_LOSS) AS RBCLoss,
SUM(ddlpls.COLLECTION_AMOUNT_LOSS) AS PlasmaLoss FROM DONOR_VISIT dv INNER JOIN
DONOR_DRAW drw ON dv.VISIT_ID = drw.VISIT_ID INNER JOIN
DONOR_DRAW_LOSS ddlrbc ON drw.DRAW_ID = ddlrbc.DRAW_ID AND ddlrbc.LOSS_TYPE_CD = 'REDCELL' INNER JOIN
DONOR_DRAW_LOSS ddlpls ON drw.DRAW_ID = ddlpls.DRAW_ID AND ddlpls.LOSS_TYPE_CD = 'PLASMA' WHERE dv.VISIT_DATETIME BETWEEN SYSDATE - 364 AND SYSDATE + 1 GROUP BY dv.DONOR_ID, (dv.DONOR_ID)
) SELECT dv.Donor_ID, dnr.LASTNAME, dnr.FIRSTNAME, dnr.MIDDLENAME, dnr.BIRTHDATE,
dnr.GENDER_CD,CONCAT(dnr.ABO_CD, dnr.RH_CD) AS BloodType, MAX(visit_datetime)as LastDonationDate, MAX(du.UNIT_NO) AS DIN, dvp.DONOR_PHYS_RESULT AS Wgt, dbl.RBCLOSS, dbl.PlasmaLoss FROM donor_visit dv INNER JOIN
DONOR dnr ON dv.DONOR_ID = dnr.DONOR_ID INNER JOIN
DonorBloodLoss dbl ON dnr.DONOR_ID = dbl.DONOR_ID INNER JOIN
DONOR_VISIT_PHYSICAL dvp ON dv.VISIT_ID = dvp.VISIT_ID AND dvp.DONOR_PHYSICAL_ID = 'WGT' INNER JOIN
DONOR_DRAW drw ON dv.VISIT_ID = drw.VISIT_ID INNER JOIN
DONOR_UNIT du ON drw.DRAW_ID = du.DRAW_ID WHERE dbl.RBCLOSS >= 1679 OR
(dbl.PlasmaLoss >= 11250 AND dvp.DONOR_PHYS_RESULT BETWEEN 110 AND 175) OR
(dbl.PlasmaLoss >= 13650 AND dvp.DONOR_PHYS_RESULT > 175) GROUP BY du.UNIT_NO, dv.Donor_ID, dnr.LASTNAME, dnr.FIRSTNAME, dnr.MIDDLENAME, dnr.BIRTHDATE, dnr.GENDER_CD, CONCAT(dnr.ABO_CD, dnr.RH_CD), dvp.DONOR_PHYS_RESULT, dbl.RBCLOSS, dbl.PlasmaLoss ORDER BY dnr.LASTNAME;