Pessoal,
Eu tenho uma tabela com mais ou menos a seguinte estrutura:
ID (NUMBER)
STATUS (NUMBER)
DATA (DATE)
Eu posso inserir várias vezes o mesmo ID, desde que o status não se repita.
Preciso agora fazer uma consulta ou view onde só sejam exibidos os últimos registros de cada ID.
Suponha que existam os seguintes registros na tabela:
ID: 1 / Status: 1 / Data: 18/09/2006
ID: 1 / Status: 2 / Data: 19/09/2006
ID: 1 / Status: 3 / Data: 20/09/2006
ID: 2 / Status: 2 / Data: 18/09/2006
A minha consulta deveria retornar somente:
ID: 1 / Status: 3 / Data: 20/09/2006
ID: 2 / Status: 2 / Data: 18/09/2006
Fico grato se alguém puder me ajudar.
Obrigado
Consulta - Pegar sempre ultima data
-
- Rank: Estagiário Sênior
- Mensagens: 8
- Registrado em: Seg, 24 Abr 2006 9:33 am
- Localização: São Carlos - SP
Marco Antonio Rocha
-
- Rank: Analista Júnior
- Mensagens: 73
- Registrado em: Qui, 21 Set 2006 10:13 am
- Localização: sp
Utilize uma subconsulta somente com o ID e a DATA dentro de um Select ID,MAX(DATA).
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Sim, isso funciona. Mas lembre-se que CASO exista 2 ID iguais com a mesma DATA e por acaso essa data for a maior, o SQL vai mostrar os 2 status - duplicar. (Não sei se o marcoantoniorocha quer isso)
select x.*
from
tabela x
, (select id, max(data) data
from tabela
group by id
) t
where x.id = t.id
and x.data = t.data
-
- Rank: Estagiário Sênior
- Mensagens: 8
- Registrado em: Seg, 24 Abr 2006 9:33 am
- Localização: São Carlos - SP
Marco Antonio Rocha
Obrigado a quem me respondeu, fui tentar novamente realizar minha consulta e reparei que o meu problema não é exatamente esse. Na verdade, o agrupamento é realizado por outro id.
Mesmo com as respostas já dadas, ainda não consegui obter o resultado desejado (mas vou continuar tentando )
Vou exemplificar melhor:
Criando a tabela
Inserindo alguns registros de teste
SELECT *
Os registros que preciso
Mais uma vez, obrigado
Mesmo com as respostas já dadas, ainda não consegui obter o resultado desejado (mas vou continuar tentando )
Vou exemplificar melhor:
Criando a tabela
CREATE TABLE TESTE (
ID NUMBER,
STATUS NUMBER,
OUTRO_ID NUMBER,
DATA DATE
);
INSERT INTO TESTE VALUES (1, 0, 1, sysdate + 1);
INSERT INTO TESTE VALUES (2, 1, 1, sysdate + 2);
INSERT INTO TESTE VALUES (3, 2, 1, sysdate + 3);
INSERT INTO TESTE VALUES (4, 0, 2, sysdate);
INSERT INTO TESTE VALUES (5, 0, 3, sysdate);
ID STATUS OUTRO_ID DATA
---------- ---------- ---------- --------
1 0 1 22/09/06
2 1 1 23/09/06
3 2 1 24/09/06
4 0 2 21/09/06
5 0 3 21/09/06
ID STATUS OUTRO_ID DATA
---------- ---------- ---------- --------
3 2 1 24/09/06
4 0 2 21/09/06
5 0 3 21/09/06
-
- Rank: Estagiário Sênior
- Mensagens: 8
- Registrado em: Seg, 24 Abr 2006 9:33 am
- Localização: São Carlos - SP
Marco Antonio Rocha
Acho que consegui:
Aparentemente funciona. Vou fazer mais alguns testes...
select t1.*
from teste t1, (select outro_id, max(data) data from teste group by outro_id) t2
where t1.outro_id = t2.outro_id and t1.data = t2.data;
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 19 visitantes