使用"HAVING"子句忽略SQL函数调用

The*_*ode 0 mysql sql

对于以下查询,MAX函数似乎完全被忽略.MAX函数对查询结果没有影响

SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
having MAX(event_timestamp);
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

这是您的查询:

SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
HAVING MAX(event_timestamp);
Run Code Online (Sandbox Code Playgroud)

你的HAVING条款是说:取最大的时间戳.如果最大值不等于零或NULL,那么一切都很好.这完全等同于:

HAVING MAX(event_timestamp) <> 0
Run Code Online (Sandbox Code Playgroud)

我怀疑你想要:

SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
ORDER BY event_timestamp DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

编辑:

为了优化性能,在创建索引alarm_life_cycle_idevent_timestamp:

create index alarm_notification_alci_et on alarm_notification(alarm_life_cycle_id, event_timestamp)
Run Code Online (Sandbox Code Playgroud)