Uma coisa muito interessante que a maioria dos SGBDs atuais no mercado tem é uma propriedade que permite realizar um SELECT dentro de outro SELECT. Vamos imaginar a seguinte situação, temos os seguintes registros de uma tabela:
Codigo | Tipo | Status |
1 | 1 | 1 |
2 | 2 | 3 |
3 | 2 | 4 |
4 | 1 | 2 |
5 | 2 | 5 |
Agora você deseja agrupar esses itens pelo Tipo exibindo o ultimo registro. Quando usamos o GROUP BY o SELECT agrupa todos os itens mais pegando sempre o primeiro registro.
Ex: SELECT * FROM tabela GROUP BY Tipo
Resultados:
Codigo | Tipo | Status |
1 | 1 | 1 |
2 | 2 | 3 |
Mesmo que você utilize o ORDER BY dentro deste SELECT ele não ira funcionar (SELECT * FROM tabela GROUP BY Tipo ORDER BY Codigo).
Como queremos o ultimo registro vamos então usar um SELECT dentro de outro SELECT, vamos preceder da seguinte maneira, primeiro vamos criar um SELECT de maneira que os dados venham em ordem decrescente em seguida utilizando a técnica para criar um SELECT dentro de outro e vamos agrupá-los pelo Tipo.
Ex: SELECT * FROM (SELECT * FROM tabela ORDER BY Código DESC) AS a GROUP BY a.Tipo
Resultados:
Código | Tipo | Status |
4 | 1 | 2 |
5 | 2 | 5 |
Podemos usar o SELECT dentro de outro SELECT para inúmeras soluções, basta apenas surgir à oportunidade.
2 comentários:
Valeu, cara! Resolveu geral um problema no meu projeto aqui!
Cara vlw mesmo tava tentando esses subselects, mas me esquecia de colocar o alias para a subconsulta... daí já viu né.
Postar um comentário