Dúvida GROUP BY com referencias trocadas

Oracle

08/09/2016

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

Curtidas 0

Melhor post

Roberto Spernega

Roberto Spernega

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;
GOSTEI 1

Mais Respostas

Huidemar Costa

Huidemar Costa

08/09/2016

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
GOSTEI 0
Jonas Tomazelli

Jonas Tomazelli

08/09/2016

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.
GOSTEI 0
Huidemar Costa

Huidemar Costa

08/09/2016

Não entende nem se você colocar


group by  a.matricula, a.hora


?
GOSTEI 0
Huidemar Costa

Huidemar Costa

08/09/2016

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
GOSTEI 0
Jonas Tomazelli

Jonas Tomazelli

08/09/2016

Já trabalhei com SQL Server, Firebird, e só o Oracle que não entende isso.
GOSTEI 0
Huidemar Costa

Huidemar Costa

08/09/2016

É verdade, da maneira que o Roberto colocou também funciona!!
GOSTEI 0
Jonas Tomazelli

Jonas Tomazelli

08/09/2016

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;
GOSTEI 0
POSTAR