Último Registro da Tabela - Banco Firebird

15/03/2018

0

Olá,

Preciso de ajuda para mostrar o resultado do Total da Última Compra do Cliente na Tabela OS - Banco Firebird

Já procurei ajuda em vários Fóruns e não consegui.

Se eu coloco um MAX, ele retorna o Valor Maior.
Se eu coloco um ORDER BY O2.TOTAL DESC ROWS 1 TO 1, o campo retorna NULL;

Dá forma que está, retorna todos os Valores das Compras do Cliente.

O Campo está no Terceiro JOIN.

select
c.razao
, c.endereco ||' - '|| c.cep as endereco
, cast (x.data as date) as dataultimacompra
, y.total as totalultimacompra
, z.os as osultimacompra
, count(o.codos) as qtde_vendas
, sum(o.total) as total_vendas

from clientes c
join os o on o.codcli = c.codcli

join (select max (o2.dataos) as data, o2.codcli from os o2
where o2.tipo = 2
and o2.dataosfin is not null
group by o2.codcli
) as x on x.codcli = c.codcli

join (select distinct o2.total as total, o2.codcli from os o2
where o2.tipo = 2
and o2.dataosfin is not null
order by o2.total desc
) as y on y.codcli = c.codcli

join (select max(o2.os) as os, o2.codcli from os o2
where o2.tipo = 2
and o2.dataosfin is not null
group by o2.codcli
) as z on z.codcli = c.codcli

where o.tipo = 2
and o.dataosfin is not null
group by 1, 2, 3, 4, 5
order by 1
Karen Motta

Karen Motta

Responder

Posts

15/03/2018

Ricardo Araujo

Você conseguiu resolver o seu problema?
Responder

15/03/2018

Karen Motta

Você conseguiu resolver o seu problema?


Infelizmente ainda não consegui. Consegue me ajudar?
Responder

15/03/2018

Luiz Santos

Karen;
Talvez você precise fazer isso em duas etapas.
Vou supor que o número da OS seja sequencial.
Logo a maior OS é a última compra.

Então você vai ter que fazer um SELECT CLIENTE, MAX(OS) FROM TABELA.

Com esse resultado, voce vai buscar esses clientes com as OS na sua tabela principal.

Consegui ser claro?
Responder

16/03/2018

Tone Costa.

select first 1<br />
os.total, os.data_abertura, os.data_fechamento,<br />
cli.codcli, cli.nome, cli.endereco, cli.municipio, cli.bairro<br />
from os<br />
left joinn cliente cli on cli.codcli = ors.codcli<br />
where os.codcli = :codcli<br />
order by os.num_ordem_servico descending<br />
<br />
Talvez ajude.<br />
Responder

16/03/2018

Karen Motta

Luiz Fernando,

Conseguiu sim, mas não é isso que eu preciso.

Eu preciso do registro da Data da Última Compra, Valor da Última Compra, Número da Última Compra de cada Cliente.

A função MAX, dá certo somente com os campos de Data e Número da Última Compra. Mas com o Valor da Última Compra não dá certo.


Responder

16/03/2018

Karen Motta

Tone Costa,

Obrigada ! Dessa forma ajudou, mas serve para pesquisar somente um Cliente.

Se eu executo sem o parâmetro where os.codcli = :codcli ele vai mostrar o último cliente que comprou.

Mas eu preciso da Data, Valor e Número da Última Compra de todos os Cliente e não somente de um Cliente.

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar