我有一个包含严重性和过时标志的各种值的警报表,它们都是int。将SQL MAX限制为匹配WHERE子句的行
我试图建立一个CASE语句,它将返回最低严重性(1),如果所有都过时并获得最大严重性,如果有非过时警报没有过时。
过时将只会是0或1,所以如果总数和所有警报的计数是相同的,他们都是过时的,我有问题与其他案件(其中有些是过时的,但其他人不是并忽略过时的严重程度)。
这似乎是简单的东西,如下面应该工作:
(CASE
WHEN (SUM(`al`.`OBSOLETE`) = COUNT(`al`.`ALARM_ID`)) THEN MIN(`al`.`SEVERITY`)
ELSE (MAX(`al`.`SEVERITY`) WHERE `al`.`OBSOLETE` != 1)
END) AS `overallSeverity`,
但我得到的错误:
Syntax error: missing 'closing parenthesis'
下面的工作是有效的SQL但即使返回最大已过时:
(CASE
WHEN (SUM(`al`.`OBSOLETE`) = COUNT(`al`.`ALARM_ID`)) THEN MIN(`al`.`SEVERITY`)
ELSE (MAX(`al`.`SEVERITY`))
END) AS `overallSeverity`,
基本上,我该如何获得不包括垫的行的最大值在哪里?
你不能在你的字段选择中声明一个WHERE。尝试构建子查询 – etalon11