Duvida SQL

17 respostas
wagne23

Tenho a seguinte tabela

Cod|Registro|prontuario| Nome
076 3817040 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
076 4157242 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
076 4169089 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
076 4169150 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
079 4265941 000146795 GILBERTO JOSE ALVES COSTA JUNIOR

Mas preciso que me retorne somente:

076 4169150 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
079 4265941 000146795 GILBERTO JOSE ALVES COSTA JUNIOR

Tentei usar o group by mas não funcionou direito.

17 Respostas

wagne23

Tentei assim:

select Cod,Registro,prontuario,Nome from tabela group by Cod

Mas ai ele pede pra adicionar os outros campos no group by ai o resultado e que ele retorna todos os registros. Tentei tambem adicionando distinct mas o resultado foi o mesmo.

el_loko

Não entendi o que você quer fazer exatamente. Trazer somente os últimos 2 registros?

A única diferença dos dois últimos registros para os primeiros é a coluna Registro.

wagne23

Eu preciso que ele não me repita todas as informações baseado na primeira coluna

pmlm

E que valores queres das seguintes? A primeira? A última? Uma qualquer?

Assim serve?

SELECT cod, max(registro) AS registro, max(prontuario) AS prontuario, max(nome) AS nome from tabela group by cod

wagne23

Eu preciso de apenas uma ocorrencia de cada codigo. Quando eu tento usar o group by cod, ele me retorna um erro dizendo que eu devo incluir as outras colunas e ai quando eu faço isso ele me traz todos os resultados.

Prudencio

Você não pode usar o group by (nesse caso) porque a coluna Registro não se repete.

A não ser que precise dela dela, remova-a de seu select.

Se precisar, vai depender da sua lógica. Se quer o último ou o primeiro registro, ou algo assim.

el_loko

Prudêncio:
Você não pode usar o group by (nesse caso) porque a coluna Registro não se repete.

A não ser que precise dela dela, remova-a de seu select.

Se precisar, vai depender da sua lógica. Se quer o último ou o primeiro registro, ou algo assim.

Isso mesmo. Se precisar da coluna registro vais ter que jogar os dados em uma tabela temporária, ou usar um cursor e implementar
uma lógica para trazer o primeiro ou o último registro.

wagne23

Verdade, agora deu certo. Obrigado pela ajuda.

zoren

Não era melhor usar um distinct no campo COD??

Prudencio

O resultado seria o mesmo com ambas as cláusulas, o que pode vir a mudar é o desempenho - depende do banco e da tabela à que se faz acesso.

Aí já ficaria à cargo do desenvolvedor decidir :stuck_out_tongue:

Vmaia

wagne23:
Tenho a seguinte tabela

Cod|Registro|prontuario| Nome
076 3817040 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
076 4157242 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
076 4169089 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
076 4169150 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
079 4265941 000146795 GILBERTO JOSE ALVES COSTA JUNIOR

Mas preciso que me retorne somente:

076 4169150 000146795 GILBERTO JOSE ALVES COSTA JUNIOR
079 4265941 000146795 GILBERTO JOSE ALVES COSTA JUNIOR

Tentei usar o group by mas não funcionou direito.

Pelo que deu para perceber não está repetindo as linhas de consulta não.
talvez vc tenha que aumentar os filtros, vai depender do que tua logica precisa :smiley:

pmlm

Se vires bem o exemplo que pus, não vai acontecer isso.

zoren

Se vires bem o exemplo que pus, não vai acontecer isso.

Não vai funcionar direito

para funcionar desse jeito vc tem q fazer com subquery e relacionar a subquery com a query original

eu fiz uma vez desse jeito que vc falou e trazia os valores errados

Vmaia
acho que algo desse gênero deve funcionar,  retirei o prontuario caso você use teremos que utilizar uma outro solução. =D

acho que algo desse gênero deve funcionar, retirei o prontuario caso você use teremos que utilizar uma outro solução. =D

pmlm

Daí eu ter perguntado que valores querias. Porque do teu exemplo acima, não há regra nenhuma para os valroes de registro, prontuário e nome…

pmlm

Vmaia:
SELECT DISTINCT Cod, prontuario, Nome FROM ( SELECT Cod, prontuario, Nome FROM sua_tabela )
acho que algo desse gênero deve funcionar, retirei o prontuario caso você use teremos que utilizar uma outro solução. =D

Isso dá exactamene o mesmo resultado do que

Mas pelos vistos o único “distinct” pretendido é o cod

Vmaia

pmlm:
Vmaia:
SELECT DISTINCT Cod, prontuario, Nome FROM ( SELECT Cod, prontuario, Nome FROM sua_tabela )
acho que algo desse gênero deve funcionar, retirei o prontuario caso você use teremos que utilizar uma outro solução. =D

Isso dá exactamene o mesmo resultado do que

Mas pelos vistos o único “distinct” pretendido é o cod

mil perdões, eu estava morto quando escrevi isso …ashuahsua

vc usa o valor de resgitro para alguma coisa ?

Criado 19 de maio de 2010
Ultima resposta 20 de mai. de 2010
Respostas 17
Participantes 6