首页 > 解决方案 > 使用Max时oracle缺少表达式

问题描述

该项目需要收集过去 27 个月的数据,这将满足 2 个条件:

3个月(今年)+12年(上年)+12年(上年)1个月(今年)+12年(上年)+12年(上年)+2(上3年)或2月(今年)+ 12 年(上一年)+ 12 年(上一年)+ 1(上一年) 我需要在数据中添加一个条件/列,称为“日期条件”,对于条件 1,仅显示今年和上一年的数据(3 + 12 + 12)个月,对于条件2,显示今年和上一年以及上一年的数据(1/2 + 12 + 12 + 1/2)个月。

这个条件以前是在tableau中作为计算字段的,但是性能太慢了,所以我想在数据级别进行过滤。我编写了如下代码,但收到错误 936:缺少表达式

SELECT * FROM DDS_MQC_QAP_VW 
WHERE (INSP_YEAR IS NULL  
AND INSP_RESULT_REASON_DESC NOT LIKE '%On hold%'
AND INSP_RESULT_REASON_DESC NOT LIKE '%Aborted%'
)
OR
(
(
INSPECTION_DATE BETWEEN 
ADD_MONTHS(LAST_DAY(
ADD_MONTHS( (SELECT MAX(INSPECTION_DATE) AS MAX_DATE FROM DDS_MQC_QAP_VW) -26,))+1,-1)
AND (SELECT MAX(INSPECTION_DATE) AS MAX_DATE FROM DDS_MQC_QAP_VW)
)
AND INSP_RESULT_REASON_DESC NOT LIKE '%On hold%'
AND INSP_RESULT_REASON_DESC NOT LIKE '%Aborted%'
)

相关数据: 在此处输入图像描述

标签: oracle

解决方案


把逗号移到另一个地方:

ADD_MONTHS( (SELECT MAX(INSPECTION_DATE) AS MAX_DATE FROM DDS_MQC_QAP_VW) -26,))+1,-1)
                                                                             ^
                                                                            here

ADD_MONTHS( (SELECT MAX(INSPECTION_DATE) AS MAX_DATE FROM DDS_MQC_QAP_VW), -26))+1,-1)

推荐阅读