Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtendo valores errados para outras colunas quando seleciono MAX(updated_date)


Você precisa de uma cláusula GROUP BY ou de uma consulta mais complexa.
SELECT field1, MAX(updated_date)
  FROM mytable
 GROUP BY field1

Para os dados de amostra, isso retornará 3 linhas.

Mais provavelmente, você quer:
SELECT t1.field1, t3.max_date
  FROM mytable AS t1
  JOIN (SELECT MAX(t2.updated_date) AS max_date
          FROM mytable AS t2
       ) AS t3
    ON t1.updated_date = t3.max_date;

Para os dados de amostra, isso retornará 1 linha:
ta3   2012-03-11 11:05:56

Dos principais DBMS, apenas o MySQL permite omitir a cláusula GROUP BY quando você tem uma mistura de colunas agregadas e não agregadas na lista de seleção. O padrão SQL requer a cláusula GROUP BY e você deve listar todas as colunas não agregadas nela. Às vezes, no MySQL, omitir a cláusula GROUP BY produz a resposta desejada; muitas vezes, porém, consegue dar uma resposta inesperada.