Maior Data

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
jerry-sc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 01 Nov 2011 1:24 pm

Pessoal, bom dia!

Eu tenho uma tabela com código do cliente, numero de nota, valor, etc., e quero trazer a data de sua última compra. Um cliente pode ter comprado várias vezes, ele está trazendo todas as compras.

Queria postar o código aqui, mas não consigo porque o site diz que estou publicando uma URL.

Eu quero que ele traga apenas a última compra, ou seja, a que possua data maior (de todos os clientes).

Alguém têm noção de como posso fazer isso?

Obrigado.
Avatar do usuário
gpereira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Sáb, 10 Dez 2011 10:56 am
Gustavo Antonio Pereira
OCA Oracle Database 10g Administrator Certified Associate

Jerry,

Não sei bem se entendi seu problema..

mas seria isso?

Selecionar tudo

SELECT id_cli, ...., DATA_COMPRA
FROM CLIENTE
WHERE ROWNUM <= 1 --TRAZENDO PRIMEIRA LINHA DA COLUNA
ORDER BY DESC DATA_COMPRA --ORDENANDO DE FORMA DECRESCENTE
Abç..
Avatar do usuário
gpereira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Sáb, 10 Dez 2011 10:56 am
Gustavo Antonio Pereira
OCA Oracle Database 10g Administrator Certified Associate

gpereira escreveu:Jerry,

Não sei bem se entendi seu problema..

mas seria isso?

Selecionar tudo

SELECT id_cli, ...., DATA_COMPRA
FROM CLIENTE
WHERE ROWNUM <= 1 --TRAZENDO PRIMEIRA LINHA DA COLUNA
ORDER BY DESC DATA_COMPRA --ORDENANDO DE FORMA DECRESCENTE
Abç..
Apenas corrigindo o primeiro comentario...

-- PRIMEIRA LINHA DA CONSULTA
jerry-sc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 01 Nov 2011 1:24 pm

Gustavo, obrigado pela ajuda.

Na verdade, eu tenho uma tabela onde grava todas as notas fiscais, com todas as informações pertinentes á ela.
Eu preciso gerar um relatório que traga a última compra(faturamento) do cliente. Eu tentei com a cláusula MAX, mas como eu estou utilizando um TO_CHAR na data, não consigo utilizar o MAX.

Resumindo, eu preciso fazer um relatório de último faturamento por cliente, entendeu?

Eu imagino que eu tenha que fazer uma subquery, mas não tenho idéia de como fazer.

Obrigado.
Jerry
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Tenta criar um sub select utilizando o MAX e depois você converte com o to_char..
fica + ou - assim:

Selecionar tudo

select to_char(campo)
from (
select max(campo_data) campo
from tabela c
)
Espero ter ajudado.
RafaelFantin
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qui, 15 Dez 2011 4:01 pm

Pablo,

Não precisa utilizar uma sub-query nesse exemplo que você passou. Veja:

Selecionar tudo

select To_Char(max(campo_data),'mmrrrr') campo
from tabela c
jerry-sc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 01 Nov 2011 1:24 pm

No meu caso, tenho assim

Selecionar tudo

to_char(to_date(NS.DATA_DA_EMISSAO,'yyyymmdd'),'dd/mm/yyyy')
Se eu colocar um MAX ali antes do campo data, não funciona.
Avatar do usuário
gpereira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Sáb, 10 Dez 2011 10:56 am
Gustavo Antonio Pereira
OCA Oracle Database 10g Administrator Certified Associate

jerry-sc escreveu:No meu caso, tenho assim

Selecionar tudo

to_char(to_date(NS.DATA_DA_EMISSAO,'yyyymmdd'),'dd/mm/yyyy')
Se eu colocar um MAX ali antes do campo data, não funciona.
So para entender..

O campo já não é do tipo date?

Não entendi porque você passa p data depois formatar em char..

Não poderia ser assim:

Selecionar tudo

(to_char(NS.DATA_DA_EMISSAO, 'dd/mm/yyyy')
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

aham...também funciona... :mrgreen:
jerry-sc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 01 Nov 2011 1:24 pm

É tipo number... ele grava por exemplo 20120110
Avatar do usuário
gpereira
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Sáb, 10 Dez 2011 10:56 am
Gustavo Antonio Pereira
OCA Oracle Database 10g Administrator Certified Associate

Creio então que o subselect do Pablo funione normalmente.. Não?
jerry-sc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 01 Nov 2011 1:24 pm

Infelizmente, ainda não deu certo... :?
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Jerry...como você tinha dito que grava como number você pode fazer dessa forma (utilizando a data em que você deu exemplo):

Selecionar tudo

select max(to_date(20120110,'yyyy/mm/dd')) from tabela

MAX(TO_DATE(20120110,'YYYY/MM/
------------------------------
10/1/2012

caso não funcionar, poste o seu comando junto com a msg de erro

t+
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Bem,
(acabei errando ao enviar e estou escrevendo denovo., :/).
Se a data está em número não precisa converter antes do MAX.
Tenta algo assim:

Selecionar tudo

Select *
from tab
where (cliente,data) IN (SELECT Cliente , MAX(data) group by cliente) 
jerry-sc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 01 Nov 2011 1:24 pm

Muito bem!!! Agora deu certo, muito obrigado!!!!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 10 visitantes