2013-02-26 46 views
1

昨天我遇到了一些sql奇怪。我有融化的服务器,这样,试图改善它,我做了这个查询的查询:这是MySQL错误还是我的查询错误?

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和事件本身是错误的...

所以,这是一个错误还是这个预期?

回答

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 
+0

...并且ID甚至不是随机的,它只是任意的。 – 2013-02-26 12:14:22

+0

所以在一个查询中不可能将MAX和普通字段放在一起?是否有必要有一个“SELECT MAX ...”,然后是一个“SELECT items”? – fedorqui 2013-02-26 12:15:23

+0

这应该如何工作?我需要为每个代理获取最后一个事件 – 2013-02-26 12:15:30

相关问题