很确定它必须与MAX有关,但不确定如何解决此问题...。 选择失败。 3504:(-3504)选定的非聚合值必须是关联组的一部分。 任何反馈/建议/协助表示赞赏。 试图为大型设备(30k +)的各种维护计划收集完成工作的最后日期。我很难找到适合自己的问题以进行搜索。
SELECT
MRC,
EQUIPMENT,
DESCRIPTION,
CLASSCODE,
CRITICALITY,
STATUS,
PM,
PMDESCRIPTION,
NEXTDUE,
PMTYPE,
ASSIGNEDBY,
ASSIGNEDTO,
FREQUENCY,
UOM,
WOEQUIP,
WORKORDER,
WORKORDERPM,
CHECKS,
MAX(LastCompleted) AS CDATE,
WOSTATUS
FROM
(SELECT
SE.EquipmentSurfaceAssetBK AS "MRC",
SE.EquipmentCodeBK AS "EQUIPMENT",
SE.EquipmentDescription AS "DESCRIPTION",
SE.EquipmentClassBK AS "CLASSCODE",
SE.EquipmentCriticality AS "CRITICALITY",
SE.EquipmentCostCode AS "COSTCODE",
SE.EquipmentStatus AS "STATUS",
PE.EqPMCodeBK AS "PM",
PM.PMDescription AS "PMDESCRIPTION",
PE.EqPMDueDate AS "NEXTDUE",
PE.EqPMType AS "PMTYPE",
PE.EqPMDeactivatedDate AS "DDATE",
PE.EqPMAssignedBy AS "ASSIGNEDBY",
PE.EqPMAssignedToResourceBK AS "ASSIGNEDTO",
PE.EqPMFrequency AS "FREQUENCY",
PE.EqPMFrequencyUOM AS "UOM",
WO.WorkOrderEquipmentcodeBK AS "WOEQUIP",
WO.WorkOrderCodeBK AS "WORKORDER",
WO.WorkOrderPMCodeBK AS "WORKORDERPM",
CASE
WHEN WO.WorkOrderPMCodeBK = PE.EqPMCodeBK THEN 'YES' ELSE 'NO'
END AS "CHECKS",
WO.WorkOrderStatus AS "WOSTATUS",
WO.WorkOrderCompletedDate AS "LastCompleted"
FROM IDW_PL_SURFACE.DIMSurfaceEquipment SE
JOIN IDW_PL_SURFACE.DIMEquipmentPM PE ON SE.EquipmentCodeBK = PE.EqPMEquipmentCodeBK
JOIN IDW_PL_SURFACE.DIMSurfacePM PM ON PE.EqPMCodeBK = PM.PMCodeBK
JOIN IDW_PL_SURFACE.DIMWorkOrder WO ON SE.EquipmentCodeBK = WO.WorkOrderEquipmentcodeBK) AS ST
WHERE
1=1
AND
STATUS IN ( 'I', 'IDLE')
AND
DDATE is Null
AND
PMTYPE IN ( 'V', 'F')
AND "CHECKS" IN ( 'YES')
GROUP BY
EQUIPMENT
答案 0 :(得分:0)
“选择”中未聚合的列与“分组依据”中列出的列不匹配。您可以将选择项中的所有内容(LastCompleted除外)添加到分组依据,也可以从选择项中删除一堆列:
select
EQUIPMENT,
MAX(LastCompleted) as CDATE
from
--your subquery here
where STATUS in ('I','IDLE')
and DDATE is Null
and PMTYPE in ('V','F')
and "CHECKS" in ('YES')
group by
EQUIPMENT
答案 1 :(得分:0)
如果您只想每LastCompleted
使用最新的EQUIPMENT
行,请应用RANK / ROW_NUMBER:
SELECT
SE.EquipmentSurfaceAssetBK AS "MRC",
SE.EquipmentCodeBK AS "EQUIPMENT",
SE.EquipmentDescription AS "DESCRIPTION",
SE.EquipmentClassBK AS "CLASSCODE",
SE.EquipmentCriticality AS "CRITICALITY",
SE.EquipmentCostCode AS "COSTCODE",
SE.EquipmentStatus AS "STATUS",
PE.EqPMCodeBK AS "PM",
PM.PMDescription AS "PMDESCRIPTION",
PE.EqPMDueDate AS "NEXTDUE",
PE.EqPMType AS "PMTYPE",
PE.EqPMDeactivatedDate AS "DDATE",
PE.EqPMAssignedBy AS "ASSIGNEDBY",
PE.EqPMAssignedToResourceBK AS "ASSIGNEDTO",
PE.EqPMFrequency AS "FREQUENCY",
PE.EqPMFrequencyUOM AS "UOM",
WO.WorkOrderEquipmentcodeBK AS "WOEQUIP",
WO.WorkOrderCodeBK AS "WORKORDER",
WO.WorkOrderPMCodeBK AS "WORKORDERPM",
CASE
WHEN WO.WorkOrderPMCodeBK = PE.EqPMCodeBK THEN 'YES' ELSE 'NO'
END AS "CHECKS",
WO.WorkOrderStatus AS "WOSTATUS",
WO.WorkOrderCompletedDate AS "LastCompleted"
FROM IDW_PL_SURFACE.DIMSurfaceEquipment SE
JOIN IDW_PL_SURFACE.DIMEquipmentPM PE
ON SE.EquipmentCodeBK = PE.EqPMEquipmentCodeBK
JOIN IDW_PL_SURFACE.DIMSurfacePM PM
ON PE.EqPMCodeBK = PM.PMCodeBK
JOIN IDW_PL_SURFACE.DIMWorkOrder WO
ON SE.EquipmentCodeBK = WO.WorkOrderEquipmentcodeBK
WHERE 1=1
AND STATUS IN ( 'I', 'IDLE')
AND DDATE is Null
AND PMTYPE IN ( 'V', 'F')
AND "CHECKS" IN ( 'YES')
QUALIFY RANK() OVER (PARTITION BY EQUIPMENT ORDER BY LastCompleted) = 1