Dúvida GROUP BY com referencias trocadas
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.
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
Curtidas 0
Melhor post
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;
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
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
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
08/09/2016
Não entende nem se você colocar
?
group by a.matricula, a.hora
?
GOSTEI 0
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
08/09/2016
Já trabalhei com SQL Server, Firebird, e só o Oracle que não entende isso.
GOSTEI 0
Huidemar Costa
08/09/2016
É verdade, da maneira que o Roberto colocou também funciona!!
GOSTEI 0
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;
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