Espero que o e-mail não tire toda a formatação... vamos ver se fica legível.

Veja se é isso que vc quer.
Tabela que criei com alguns dados, pra fazer o teste:

select tv_data, tv_produto, tv_valor
from teste_vendas;

23/05/2012     1     10,00
22/05/2012     1     9,50
22/05/2012     2     5,00
21/05/2012     2     8,00
01/05/2012     2     2,00
02/05/2012     3     50,00
04/05/2012     3     60,00
14/05/2012     3     65,00


Select que entendi que é o que vc deseja, confira se é isso mesmo:

select *
from teste_vendas
where (tv_data, tv_produto) in (
select max(tv_data), tv_produto from teste_vendas
group by tv_produto);


23/05/2012     1     10,00
22/05/2012     2     5,00
14/05/2012     3     65,00

Ou seja, trouxe agrupado por produto, trazendo sempre o valor do registro
que contém a data mais recente.


Estou muito enferrujado em SQL, não lerei em consideração a performance.
Se algum colega souber  como melhorar essa query, fiquem a vontade pra me
corrigir.




2012/5/23 Bruno Banfi <bruno.ba...@yahoo.com.br>

> **
>
>
> Só coloquei o campo EST_CUST_UND no group by para tentar explicar para
> vocês o que estava tentando fazer.
>
> Ok Milton, aguardo seu exemplo, muito obrigado.
>
>
> ________________________________
> De: Milton Bastos Henriquis Jr. <miltonbas...@gmail.com>
> Para: oracle_br@yahoogrupos.com.br
> Enviadas: Quarta-feira, 23 de Maio de 2012 16:29
>
> Assunto: Re: [oracle_br] Help no Script
>
> Sim, nós sabemos disso... rs...
>
> A questão é que vc não pode alterar a lógica do teu select pra ele "rodar",
> ou seja, adicionar um campo no group by apenas
> pra não dar erro de compilação. Alterou a lógica, e daí realmente não vai
> retornar o que vc espera.
>
> Basta vc trabalhar com subselects, por exemplo, isso pensando de maneira
> mais fácil e sem pensar em performance.
>
> Rafael: o e-mail que vc acabou de mandar está errado.
> Ele não quer apenas a ultima data.
> Ele quer a última data DE CADA PRODUTO.
>
> Bruno, assim que tiver um tempinho eu te colo um exemplo.
> Não tenho dados aqui na minha base pra testar esse select, vou tentar gerar
> um pouco de dados pra simular teu caso.
> Mas é muito fácil de fazer, basta usar subselect.
>
> 2012/5/23 Bruno Banfi <bruno.ba...@yahoo.com.br>
>
> > **
>
> >
> >
> > Milton, fiz dessa maneira porque não é possivel dar um Select na coluna e
> > não colocar no group by.
> >
> > Não posso fazer isso, da erro:
> >
> > SELECT MAX(I.EST_DATA_ENTRADA) DATA_ENTRADA, I.EST_FK_EPI, I.EST_CUST_UND
> > from ESTOQUE as I
> > Group by I.EST_FK_EPI
> >
> >
> > ________________________________
> > De: Milton Bastos Henriquis Jr. <miltonbas...@gmail.com>
> > Para: oracle_br@yahoogrupos.com.br
> > Enviadas: Quarta-feira, 23 de Maio de 2012 15:53
> >
> > Assunto: Re: [oracle_br] Help no Script
> >
> > Sim, vc fez errado!
> >
> > Vc colorou o campo VALOR no group by.
> > É por isso que aparecem dois valores diferentes pro mesmo produto - foi
> vc
> > mesmo que mandou que ficasse assim.
> >
> > Eu já imaginei que tivesse esse erro, por isso coloquei aquele
> comentário.
> >
> > Se vc quer apenas da data mais recente, mande agrupas apenas pelo
> produto,
> > daí pegue a data mais recente usando o MAX, e por fim pegue o valor do
> > produto naquela data.
> >
> > 2012/5/23 Bruno Banfi <bruno.ba...@yahoo.com.br>
> >
> > > **
> >
> > >
> > >
> > > Milton,
> > >
> > > Veja que no resultado aparece dois valores para o mesmo produto mas com
> > > datas diferentes:
> > >
> > >
> > > > 2011-09-28                        2                              0.65
> > > > 2012-05-16                        2                              0.69
> > >
> > > Na minha consulta precisa aparecer o valor do produto com a data mais
> > > recente. Nesse caso acima era para aparecer somente:
> > >
> > > 2012-05-16                        2                              0.69
> > >
> > > Não deu certo o que o Rafael sugeriu. Vou revisar para ver se estou
> > > fazendo alguma coisa errada.
> > >
> > > Obrigado pelo retorno.
> > >
> > > Bruno
> > >
> > > ________________________________
> > > De: Milton Bastos Henriquis Jr. <miltonbas...@gmail.com>
> > > Para: oracle_br@yahoogrupos.com.br
> > > Enviadas: Quarta-feira, 23 de Maio de 2012 15:27
> > > Assunto: Re: [oracle_br] Help no Script
> > >
> > >
> > > Sobre a sugestão do Rafael, importante lembrar que:
> > > Se for usar rownum, tem que usar subselect também.
> > >
> > > Bruno: tenho quase certeza que vc não explicou corretamente o que vc
> > > realmente deseja.
> > >
> > > Essa query que vc passou, ela está CORRETA e vc deseja extrair essa
> > > informação dela?
> > > Ou ela está ERRADA e vc deseja corrigi-la?
> > >
> > > Se ela estiver correta, pra extrair exatamente o que vc descreveu, é
> > > fácil...
> > > Sem fazer muita alteração e usando a dica do Rafael:
> > >
> > > Select DATA_ENTRADA, EST_CUST_UND
> > > from (
> > > SELECT MAX(I.EST_DATA_ENTRADA) DATA_ENTRADA,
> I.EST_FK_EPI,I.EST_CUST_UND
> > > from ESTOQUE as I, EPI as H
> > > INNER JOIN ESTOQUE ON EST_FK_EPI = H.EPI_ID
> > > Group by I.EST_FK_EPI, I.EST_CUST_UND
> > > order by MAX(I.EST_DATA_ENTRADA))
> > > where rownum = 1;
> > >
> > > Mas tenho o leve pressentimento que não é isso que vc quer... que
> talvez
> > vc
> > > queira refazer
> > > a query, mudar esse agrupamento, mas nesse caso só dá pra te ajudar se
> vc
> > > realmente explicar melhor.
> > >
> > > 2012/5/23 Rafael Vieira <vieira.rafae...@yahoo.com.br>
> > >
> > > > **
> > >
> > > >
> > > >
> > > > Tenta colocar a cláusula having fazendo uma condição data =
> max(data),
> > pq
> > > > o having aceita um filtro com agrupamento, ou então, faria uma
> > > "gamb",order
> > > > by data desc  e colocaria um rownum = 1
> > > >
> > > > ________________________________
> > > > De: Bruno Banfi <bruno.ba...@yahoo.com.br>
> > > > Para: "oracle_br@yahoogrupos.com.br" <oracle_br@yahoogrupos.com.br>
> > > > Enviadas: Quarta-feira, 23 de Maio de 2012 14:56
> > > > Assunto: [oracle_br] Help no Script
> > > >
> > > >
> > > >
> > > > Boa tarde a todos,
> > > >
> > > > Tenho o seguinte script:
> > > >
> > > > SELECT MAX(I.EST_DATA_ENTRADA) as 'DATA_ENTRADA',
> > > > I.EST_FK_EPI,I.EST_CUST_UND
> > > >            from ESTOQUE as I, EPI as H
> > > >            INNER JOIN ESTOQUE ON EST_FK_EPI = H.EPI_ID
> > > >            Group by I.EST_FK_EPI, I.EST_CUST_UND
> > > >            ORDER BY I.EST_FK_EPI
> > > >
> > > > Que da o seguinte resultado:
> > > >
> > > > EST_DATA_ENTRADA        EST_FK_EPI        EST_CUST_UND
> > > > 2012-03-28                        NULL                      23.00
> > > > 2011-09-28                        2                              0.65
> > > > 2012-05-16                        2                              0.69
> > > > 2012-05-16                        4                              1.55
> > > > 2011-09-28                        59                            3.05
> > > > 2011-10-27                        77                            3.75
> > > > 2012-02-17                        77                            3.05
> > > > 2011-09-30                        79                            2.25
> > > > 2012-02-17                        97                            2.25
> > > > 2011-09-30                        99                            22.14
> > > > 2011-09-30                        121                          7.56
> > > > 2011-09-30                        139                          46.00
> > > > 2012-02-17                        140                          16.50
> > > > 2012-02-17                        144                          3.71
> > > > 2011-09-30                        144                          6.55
> > > > 2012-05-16                        161                          3.71
> > > > 2011-09-30                        161                          3.70
> > > >
> > > > O resultado que preciso trazer é o valor (EST_CUST_UND) com a data
> > > > (EST_DATA_ENTRADA) mais recente.
> > > >
> > > > Muito obrigado,
> > > >
> > > > Bruno
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > >
> > > >
> > >
> > > --
> > > Att,
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > > ------------------------------------
> > >
> > >
> > > ----------------------------------------------------------
> > > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> > > inteira responsabilidade de seus remetentes.
> > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> > > ----------------------------------------------------------
> > > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package »
> > > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO
> > ESPAÇO!
> > > VISITE: http://www.oraclebr.com.br/
> > > ---------------------------------------------------------- Links do
> > Yahoo!
> > > Grupos
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> >
> > --
> > Att,
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > ------------------------------------
> >
> > ----------------------------------------------------------
> > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> > inteira responsabilidade de seus remetentes.
> > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> > ----------------------------------------------------------
> > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package »
> > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO
> ESPAÇO!
> > VISITE: http://www.oraclebr.com.br/
> > ---------------------------------------------------------- Links do
> Yahoo!
> > Grupos
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
> --
> Att,
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> ------------------------------------
>
> ----------------------------------------------------------
> >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> inteira responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> ----------------------------------------------------------
> >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package »
> Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO!
> VISITE: http://www.oraclebr.com.br/
> ---------------------------------------------------------- Links do Yahoo!
> Grupos
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Att,


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

--------------------------------------------------------------------------------------------------------------------------
>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------
>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » 
>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>http://www.oraclebr.com.br/  
------------------------------------------------------------------------------------------------------------------------
 Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a