Duvida em sql

12 respostas
ph_ms

select DISTINCT A, B from C where 1=1 order by B

do resultado da consulta acima, eu preciso pegar somente os valores de A

att,

12 Respostas

Vini_Fernandes

Entao, tente o seguinte:

select distinct A from C where 1=1 order by C.B

Abracao

ph_ms

Assim não é possível, pq o elemento do order by deve estar presente na consulta…

então, essa consulta: select DISTINCT A, B from C where 1=1 order by B

vai me retornar valores distintos d o par A,B, certo??? eu precisa pegar esse resultado e aplicar em cima dele, outra consulta… pra pegar somente os distintos de A…

Vini_Fernandes

Creio que voce queira uma subquery do tipo:

SELECT *
FROM sp a
WHERE qty >ALL (SELECT qty FROM sp b
                WHERE a.pno = b.pno 
                AND a.sno <> b.sno
                AND qty IS NOT NULL)

abracao

ph_ms

não, o q eu quero é isso:

Imagine a tabela:
numero | data_criacao
0001 | 01/02/09
0002 | 01/02/09
0002 | 03/02/09
0003 | 02/02/09
0004 | 02/02/09

Repare q o número 0002, aparece duas vezes.

com essa sql: select DISTINCT A, B from C where 1=1 order by B

teríamos:

0001 | 01/02/09
0002 | 01/02/09
0003 | 02/02/09
0004 | 02/02/09
0002 | 03/02/09

eu preciso ordenar por data, mas só preciso dos números distintos… tipo:

0001
0003
0004
0002

spycall

Isso não vai funcionar, porque vc tem o dado “0002” em duas datas deiferentes, qual das duas datas vc quer?
Pelo o que vc disse, se vc ordenar por data de varia vir assim:
0001
0002
0003
0004

e não
0001
0003
0004
0002
como vc disse

ph_ms

repare nas datas…

se ordenar pela data… deve vir assim mesmo:

0001
0003
0004
0002

e é dessa forma q eu preciso desses registros…

Vini_Fernandes

Entao o negocio é voce AGRUPAR os resultados com a clausula GROUP BY e depois ordenar com ORDER BY:

select DISTINCT A, B from C where 1=1 group by A order by B

Abraco

spycall

Voce tem isso:

0001 | 01/02/09
0002 | 01/02/09
0003 | 02/02/09
0004 | 02/02/09
0002 | 03/02/09

Se tiver mais de uma data, vc quer retornar apena 1 vez ordenado pela data maior?

ph_ms

is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

ph_ms

exatamente isso spycall

spycall

Qual banco vc está usando?

ph_ms

bem… no caso eu tô fazendo uma HQL… preciso usar no postgres, sqlserver e oracle

Criado 6 de fevereiro de 2009
Ultima resposta 6 de fev. de 2009
Respostas 12
Participantes 3