- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 10 meses atrás por santosclay.
-
AutorPosts
-
8 de abril de 2008 às 4:47 pm #81622leo_jfParticipante
Blz gte.
Sera que alguém consegue tirar uma dúvida.
Tenho uma query que busca a maxima data – MAX(ChDtInicio), mas quando busco essa data tenho duas linhas de retorno codcategoria.
Quando fiz a query somente com a data, veio corretamente a maior data, mas eu quando eu quis mostrar qual era o codigo que estava associado a essa maior data – codcategoria, ele se perde e não faz a associação.
Fiz, então, uma query com select… count(1)…having count(1) >=1, pois assim iria buscar somente uma ocorrência, ou seja, a primeira com maior data. Mas não acontece. Alguem sabe o pq do Oracle está se perdendo.
Com subquery funciona, mas já usei having count em outras ocasiões e funcionou.
Resumindo: Quero buscar a maior data, e quando acho essa maior data quero uma coluna ao lado dessa maior data que é o codigo da categoria.
Usando somente max tenho maior data, mas quando busco no select o codigo da categoria o select se perde e vem mais registros do que deveria, além de buscar a maior data e outras datas daquela matricula.
Tenho como fazer isso usando o having count, pois o mesmo eu já usei para buscar duplicidade de informação.
[]s
Ishii pela dica do decode, não sei pq não funcionou, mas por fim acabei mudando toda lógica e colocando condição(if) mesmo. Mas valeu cara.8 de abril de 2008 às 7:43 pm #81623Marcio68AlmeidaParticipanteBom…
Este assunto nada tem a ver com certificação…
Mas… vamos lá…Pelo que eu entendi você tem as seguintes informações em sua tabela :
DATA e CODIGO
Se você pegar a maior data virão vários códigos referentes à essa data, certo ???
Para resolver esse problema imagino que o melhor caminho seja por subquery :
Select MAX (codigo)
From Tabela
Where data = (Select MAX (data) from Tabela)8 de abril de 2008 às 8:51 pm #81624leo_jfParticipanteMarcio,
realmente com subquery funcionou. A duvida era o por que de não funcionar com o having count(*) visto que já usei em outros momentos, e funcionou.
Minha dúvida era essa. Por que e como faria para usar um having count nessa situação. O que queria era buscar um registro unico visto que existe dois iguais, variando gerando a data.8 de abril de 2008 às 10:10 pm #81625Marcio68AlmeidaParticipanteBom…
Eu diria que tem a ver com o tipo de consulta que você fez…
Por exemplo, você tem os seguintes dados :
DATA CODIGO
01/05/2008 0001
02/05/2008 0003
03/05/2008 0005
03/05/2008 0005
03/05/2008 0007
Quando você executa a seguinte consulta :
Select max(data), codigo
From tabela
Group by codigo
Having count(*) > 1
Então ele vai trazer a informação :
DATA = 03/05/2008 e CODIGO = 0005Porém, se você tem apenas uma linha com CODIGO 0005 e uma com CODIGO 0007, então ele vai trazer duas linhas…
Ficou claro ???8 de abril de 2008 às 10:43 pm #81626leo_jfParticipanteFala Marcio
Entendi o que tu explicou. O que está me deixando com dúvida, na verdade é como te expliquei.
Quando faço o select.
Exemplo: Select funcionario, max(datainicio) ,count(1)…. busca uma unica linha, ou seja, a maior data.
Até ai blz. Mas quando peço para mostrar mais um campo no select ( esse campo esta na mesma tabela) o oracle se perde e busca as duas linhas que existem, mas somente peço para mostrar mais um campo no select além da data, o codigo da categoria.
Isso que é minha duvida, e não consigo ver o por que disso acontecer.
Realmente com a subquery funcionou, mas se funcionou com a subquery, por que não com count já que a logica é a mesma, apenas estou listando no select mais um campo.9 de abril de 2008 às 3:45 pm #81630santosclayParticipanteOlá amigos.
Caro Leo apenas por curiosidade, você poderia disponibilizar:
1 – O modelo da tabela em questão.
2 – Alguns dados de exemplo (5 ou 6 linhas)
3 – A clausula select que funciona.
4 – A clausula select que não funciona (com este campos adicional).Apesar do seu problema já ter sido resolvido, gostaria de emular e entender o seu problema.
Abraços Clayton.
-
AutorPosts
- Você deve fazer login para responder a este tópico.