使用“HAVING”子句忽略SQL函数调用

时间:2014-05-12 14:15:53

标签: mysql sql

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

SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
having MAX(event_timestamp);

3 个答案:

答案 0 :(得分:5)

这是您的查询:

SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
HAVING MAX(event_timestamp);

您的HAVING子句说:取最大时间戳。如果最大值不等于零或NULL,那么一切都很好。这完全等同于:

HAVING MAX(event_timestamp) <> 0

我怀疑你想要:

SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
ORDER BY event_timestamp DESC
LIMIT 1;

编辑:

要优化效果,请在alarm_life_cycle_idevent_timestamp上创建索引:

create index alarm_notification_alci_et on alarm_notification(alarm_life_cycle_id, event_timestamp)

答案 1 :(得分:3)

  1. 应该有正确的条件,例如having MAX(event_timestamp) > 100
  2. 如果您使用group by
  3. ,则应该MAX
  4. 或者像@Gordon Linoff所说的那样(order by + limit 1)。

答案 2 :(得分:2)

您的查询不完整,您需要使用运算符和值&#34;具有&#34;声明,如

HAVING MAX(event_timestamp) = 100

你究竟想做什么?