我正在尝试使用内部联接(总共 3 个表)创建查询,以便每个项目仅显示一个结果(在本例中它将是 MATERIAL_ID)。
我创建了这个查询:
`SELECT DISTINCT
A.ORDER_ID, A.BATCH_ID, A.MATERIAL_ID, B.MATERIAL_DESC, A.TARGET_QTY, A.DISPENSED_QTY, A.REMAINING_QTY, A.DISPENSED_UOM, A.DISPENSE_STATUS, B.MATERIAL_TYPE, A.UNIT_PROCEDURE_ID, A.SPLIT_ID, A.BOM_REF_NO, C.CONTAINER_STATUS, C.AREA_ID, C.QTY_STATUS, C.EXPIRE_DATE
FROM
MM_DISP_MATL_ST A
INNER JOIN
MM_MATERIAL_SP B
ON A.MATERIAL_ID = B.MATERIAL_ID
INNER JOIN
MM_CONTAINER_ST C
ON B.MATERIAL_ID = C.MATERIAL_ID
AND C.CONTAINER_STATUS = 'Unrestricted'
AND C.QTY_STATUS IN ('Full','Partial')
WHERE A.ORDER_ID = :pORDER_NUMBER
ORDER BY A.BOM_REF_NO`
但它为我提供了所有重复的 MATERIAL_ID、AREA_ID 和 EXPIRE_DATE 信息。
如何修改此查询,以便每个 MATERIAL_ID 或 BOM_REF_NO 仅显示 1 个结果,并选择最早的 EXPIRE_DATE?
我尝试了 DISTINCT,但给了我我不想要的重复项。另外添加额外的 ORDER BY 也没有帮助
您可以在 where 子句中说您想要具有最早到期日期的记录
...
WHERE A.ORDER_ID = :pORDER_NUMBER
AND C.EXPIRE_DATE = (SELECT MIN(EXPIRE_DATE) FROM MM_CONTAINER_ST C2
WHERE B.MATERIAL_ID = C2.MATERIAL_ID)
ORDER BY A.BOM_REF_NO`