1

昨天我遇到了一些 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和事件本身是错误的......

那么,这是一个错误还是预期的?

4

1 回答 1

1

您正在混合聚合函数和“正常”列选择。此“功能”仅适用于 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
于 2013-02-26T12:13:51.917 回答