2013-02-26 134 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