Pergunta

Vamos dizer que eu tenho uma tabela que descreve os carros com marca, modelo, ano e algumas outras colunas.

A partir disso, eu gostaria de ter uma linha completa de cada marca e modelo de último ano.

Ou, dito de outra maneira. Cada linha teria combinação única de marca e modelo com outros dados de linha correspondente com maior valor do ano.

solução SQL padrão seria ótimo.

Foi útil?

Solução

select t1.make, t1.model, t1.year, t1.other_cols
from table t1
where year = (select max(year) from table t2
              where t2.make = t1.make
              and t2.model = t1.model
             );

Outras dicas

solução MySQL:

SELECT * FROM cars GROUP NY CONCAT(make, "-", model) ORDER BY year DESC;

Isso deve funcionar mais em qualquer lugar:

SELECT c1.* 
FROM cars c1
INNER JOIN 
  (
     SELECT Make, Model, Max(Year) AS Year
     FROM cars
     GROUP BY Make, Model
  ) c2 ON c1.Make=c2.Make AND c1.Model=c2.Model, c1.Year=c2.Year

A principal ressalva é que ano é muitas vezes uma palavra reservada (nome da função) e os meios para escapar palavras reservadas variam de acordo com platorm. Para corrigir isso, mudar o nome da coluna de ano para algo como ModelYear.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top