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

MySQL obtém os últimos registros de data de vários


Você pode use GROUP BY , mas é importante entender como funciona.

Quando você usa GROUP BY um grupo de linhas é recolhido em uma e o que é exibido nas outras colunas que não são usadas em seu GROUP BY cláusula, é determinado usando funções agregadas ou é uma linha aleatória desse grupo. Você não pode ter certeza de obter a linha correspondente à linha exibida segurando o MAX() value ou qualquer função agregada que você usou. Isso se torna especialmente óbvio, quando você faz uma consulta como:
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id

A "another_column" pode pertencer à linha que contém o valor MIN() ou o valor MAX() ou até mesmo a outra linha não exibida. Em outros RDBMS além do MySQL, na verdade, é proibido selecionar colunas que não usam uma função agregada ou não estão listadas no GROUP BY cláusula, apenas para evitar que os usuários cometam um erro ou pensem que obtiveram o resultado correto.

Portanto, no seu caso, você também deseja exibir a coluna "valor". Por razões acima, a resposta de juergen_d está errada, porque ela não seleciona "valor" e, se selecionar, você não pode ter certeza de que é o "valor" correto. A resposta de Filipe Silva está errada, porque agrupa por “valor”. Fazer isso, no seu caso, retornará a tabela inteira. A resposta de Romesh está errada, porque usar duas vezes o MAX() A função obterá os valores máximos, obviamente, mas não o valor correspondente ao valor de data e hora.

Então, como você tem que fazer isso? Aqui 3 maneiras são descritas . Aprenda-os aplicando-os você mesmo. Não é tão difícil :)