Duvida SQL

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.

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.

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.

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

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

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.

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.

[quote=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.[/quote]

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.

Verdade, agora deu certo. Obrigado pela ajuda.

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

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:

[quote=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.
[/quote]

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:

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

Se vires bem o exemplo que pus, não vai acontecer isso.[/quote]

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


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

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…

[quote=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 [/quote]

Isso dá exactamene o mesmo resultado do que

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

[quote=pmlm][quote=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 [/quote]

Isso dá exactamene o mesmo resultado do que

Mas pelos vistos o único “distinct” pretendido é o cod[/quote]

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

vc usa o valor de resgitro para alguma coisa ?