Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Obrigado pela resposta. Mas nesta sua lógica o SQL vai retornar o menor ID, mas o código continua não obedecendo a referencia, preciso que o código seja o mesmo do menor ID. EX:
ID MATRICULA CODIGO
01 1212 999
02 1212 800
03 1212 700
04 1212 850
05 1212 1050
No seu SQL o retorno é o seguinte:
01 1212 700, mas preciso que seja 01 1212 999, ou seja, o código obedece seu ID original.
Bom dia,
Veja se assim funciona:
SELECT
ID,
MATRICULA,
HORA,
CODIGO
FROM
(
SELECT
ID,
MATRICULA,
HORA,
CODIGO,
RANK() OVER (PARTITION BY MATRICULA,HORA ORDER BY ID) POSICAO
FROM
TABELA
)
WHERE POSICAO = 1Bom dia, obrigado a todos pela ajuda. Consegui resolver da seguinte maneira:
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;
da pra resolver dessa forma:
SELECT * FROM tabela a
WHERE a.id IN(