Mysql 使用“HAVING”子句忽略SQL函数调用
对于下面的查询,似乎完全忽略了MAX函数。MAX函数对查询结果没有影响Mysql 使用“HAVING”子句忽略SQL函数调用,mysql,sql,Mysql,Sql,对于下面的查询,似乎完全忽略了MAX函数。MAX函数对查询结果没有影响 SELECT alarm_severity_id FROM alarm_notification WHERE alarm_life_cycle_id = 25 having MAX(event_timestamp); 这是您的查询: SELECT alarm_severity_id FROM alarm_notification WHERE alarm_life_cycle_id = 25 HAVING MAX(event
SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
having MAX(event_timestamp);
这是您的查询:
SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
HAVING MAX(event_timestamp);
HAVING子句的意思是:取时间戳的最大值。如果最大值不等于零或NULL,则一切正常。这完全等同于:
HAVING MAX(event_timestamp) <> 0
编辑:
要优化性能,请在报警\生命周期\ id和事件\时间戳上创建索引:
应该有正确的条件,如MAXevent_时间戳>100
如果使用MAX,则应该有group by
或者按照@Gordon Linoff所说的按+限制1排序。
查询不完整,需要在having语句中使用运算符和值,如
HAVING MAX(event_timestamp) = 100
您到底想做什么?按事件排序\u时间戳描述限制1??具有MAXevent_时间戳;没有任何意义,本质上是无效的SQL。任何其他DBMS都会因为语法错误而拒绝该语句。您不需要group by来使用聚合函数。@Gordon Linoff您是对的,在这种情况下不需要group by。答案是Thnx Gordon。我明白你的意思。事实上,您发布的查询就是我之前使用的查询。但通知表中的记录数量可能非常庞大,从1到数百万不等。对于上面的查询,这不会对性能产生影响吗?有其他方法吗?你应该在事件的时间戳上有一个索引,然后看看。
create index alarm_notification_alci_et on alarm_notification(alarm_life_cycle_id, event_timestamp)
HAVING MAX(event_timestamp) = 100