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 に答える