Fórum Dúvida GROUP BY com referencias trocadas #562012

08/09/2016

0

Boa tarde pessoal, estou precisando fazer um SQL, mas não estou conseguindo finalizar, abaixo vou passar uma tabela como exemplo, então consideramos os seguintes dados:

ID | MATRICULA | HORA | CODIGO

1 1212 10:00 999
2 1212 10:00 1
3 1212 10:00 10
4 1212 10:00 25
5 1212 10:00 50
6 1212 12:00 900
7 1212 13:00 901

Blz, eu preciso agrupar esse dados por MATRICULA e HORA, e preciso mostrar o CODIGO, mas tem que ser o mesmo código do menor ID, exemplo, essa tabela acima, agrupada como eu quero deveria ficar assim:

ID | MATRICULA | HORA | CODIGO

1 1212 10:00 999
6 1212 12:00 900
7 1212 13:00 901

Espero ter sido claro. A principio parecia simples, estava resolvendo com a função MIN, mas o problema é que um ID 1 pode ter um código 900 e um ID 2 um menor.
Jonas Tomazelli

Jonas Tomazelli

Responder

Post mais votado

14/09/2016

Boa tarde,

Não desanima...

Tenta assim:
Select x.id, x.matricula, x.hora, y.codigo
From (select min(a.id) id, a.matricula, a.hora
from teste a
group by a.matricula, a.hora) x, teste y
where y.id = x.id;

Roberto Spernega

Roberto Spernega
Responder

Gostei + 1

Mais Posts

08/09/2016

Huidemar Costa

Eu fiz o select usando o Firebird, acredito que não terá problemas no Oracle...
select
min(a.id) id,
a.matricula,
a.hora,
(select  b.codigo from teste b where b.id=Min(a.id))
from teste a
group by 2, 3
Responder

Gostei + 0

08/09/2016

Jonas Tomazelli

Obrigado pelo retorno, mas o Oracle não entende o seu Script, tentei usar uma lógica parecida com essa, mas ele não consegue entender o group by.
Responder

Gostei + 0

08/09/2016

Huidemar Costa

Não entende nem se você colocar


group by  a.matricula, a.hora


?
Responder

Gostei + 0

08/09/2016

Huidemar Costa

select
min(a.id) id,
a.matricula,
a.hora,
(select  b.codigo from teste b where b.id=Min(a.id))
from teste a
group by  a.matricula, a.hora
Responder

Gostei + 0

14/09/2016

Jonas Tomazelli

Já trabalhei com SQL Server, Firebird, e só o Oracle que não entende isso.
Responder

Gostei + 0

15/09/2016

Huidemar Costa

É verdade, da maneira que o Roberto colocou também funciona!!
Responder

Gostei + 0

22/09/2016

Jonas Tomazelli

Roberto, é isso mesmo, funcionou. Muito obrigado pela ajuda.

Boa tarde,

Não desanima...

Tenta assim:
Select x.id, x.matricula, x.hora, y.codigo
From (select min(a.id) id, a.matricula, a.hora
from teste a
group by a.matricula, a.hora) x, teste y
where y.id = x.id;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar