Google
 

terça-feira, 4 de setembro de 2007

SELECT dentro de SELECT


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:

[ivan quirino] disse...

Valeu, cara! Resolveu geral um problema no meu projeto aqui!

jackfowl disse...

Cara vlw mesmo tava tentando esses subselects, mas me esquecia de colocar o alias para a subconsulta... daí já viu né.

Publicidade