Como retornar o valor máximo de uma coluna e seus respectivos valores.

Exemplo:

 

CREATE TABLE #MaxVal(id INT,VALUE INT,OtherCol CHAR(1));
    INSERT #MaxVal VALUES(1,1,'A');
    INSERT #MaxVal VALUES(1,2,'A');
    INSERT #MaxVal VALUES(1,3,'Z');
    INSERT #MaxVal VALUES(2,1,'A');
    INSERT #MaxVal VALUES(2,2,'X');
    INSERT #MaxVal VALUES(2,3,'A');
    INSERT #MaxVal VALUES(3,1,'A');
    INSERT #MaxVal VALUES(3,2,'Y');

Se você está interessado apenas no ID e o valor máximo da coluna é muito facil.

SELECT id,MAX(VALUE) AS VALUE    
FROM #MaxVal    
GROUP BY id;

OUTPUT:

ID|Value
-------------
1|3
2|3
3|2

Se voce precisa de toda a linha, precisaremos fazer um sub-select.

SELECT t.* FROM(    
SELECT id,MAX(VALUE) AS MaxValue    
FROM #MaxVal    
GROUP BY id) x    
JOIN #MaxVal t ON x.id =t.id    
AND x.MaxValue =t.VALUE

OUTPUT:

ID|Value|OtherCol
----------------------
3|2|Y
2|3|A
1|3|Z

Anúncios

Um jeito simples de migrar base de dados e até mesmo fazer um backup é usar um arquivo delimitado por virgulas, e é mais simples ainda importar esse arquivo no mySQL.

LOAD DATA LOCAL INFILE 'arquivo.ext'
INTO TABLE tabela
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(campo1, campo2, campo3);

O comando acima faria a leitura de um arquivo no seguinte formato:

texto1,texto2,texto3

Porém as vezes quando geramos o arquivo delimitado por virgulas ele possui o seguinte formato:

“texto1″,”texto2″,”texto3”

Como ficaria então? Pois caso use o comando acima, ele irá considerar a aspas dupla como parte da string. Entao podemos utilizar mais uma opção que o comando permite. 

LOAD DATA LOCAL INFILE 'arquivo.ext'
INTO TABLE tabela
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(campo1, campo2, campo3);