昨天我遇到了一些奇怪的sql语句。我有一个查询融化了服务器,所以为了改进它,我做了这个查询:
SELECT idEvent, MAX( fechaHora ) , codAgente, evento FROM eventos_centralita GROUP BY codAgente
它似乎适用于这个模式:
CREATE TABLE IF NOT EXISTS `eventos_centralita` (
`idEvent` int(11) NOT NULL AUTO_INCREMENT,
`fechaHora` datetime NOT NULL,
`codAgente` varchar(8) DEFAULT NULL,
`extension` varchar(20) DEFAULT NULL,
`evento` varchar(45) DEFAULT NULL,
PRIMARY KEY (`idEvent`),
KEY `codAgente` (`codAgente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=105847 ;
我是说,那一小时对特工来说确实是最长的。但是,事件的id和事件本身是错误的。。。
那么,这是一个bug还是预期的呢?
最佳答案
你正在混合一个聚合函数和一个“正常”列选择。这个“特性”只在MySQL中工作,并返回一个随机id。
通常应按特定列分组,并使用聚合函数选择不在该组中的所有其他列。例子:
SELECT e1.codAgente, e1.idEvent, e1.fechaHora, e1.evento
FROM eventos_centralita e1
inner join
(
select codAgente, MAX(fechaHora) as fechaHora
from eventos_centralita
group by codAgente
) e2
on e1.codAgente = e2.codAgente and e1.fechaHora = e2.fechaHora