首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用子查询执行MAX时出现Teradata错误3504

问尝试使用子查询执行MAX时出现Teradata错误3504
EN

Stack Overflow用户
提问于 2020-07-17 09:19:56
回答 2查看 64关注 0票数 0

我很确定这一定与MAX有关,但不确定如何解决这个问题……选择失败。3504:(-3504)选定的非聚合值必须是关联组的一部分。如有任何反馈/建议/帮助,我将不胜感激。尝试为大型设备子集(30k+)的各种维护计划工作收集完成的最后日期。我很难找到合适的问题来搜索我自己的答案。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-17 17:15:52

如果您只想要具有每个EQUIPMENT的最新行号的行,请应用RANK/ row _NUMBER:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2020-07-17 09:37:00

"select“中的非聚合列与"group by”中列出的列不匹配。您可以将select中的所有内容(LastCompleted除外)添加到group by中,也可以从select中删除一组列:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62945689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档