Array
(
)

Query SQL

Renato Ranzani
   - 25 set 2015

Caros, estou com um exercício que não sei direito como resolver! Tenho estas 3 tabelas abaixo e preciso da seguinte query: "CRIAR UMA QUERY PARA LISTAR OS CLIENTES E O VALOR DA ÚLTIMA COMPRA. RETORNAR O ID_CLIENTE, CPF, NOME, VALOR_ULTIMA_COMPRA"
- CLIENTE
ID_CLIENTE
CPF
NOME
DATA_NASCIMENTO
SEXO (MASCULINO/FEMININO)
LIMITE_AUTORIZADO
LIMITE_UTILIZADO
SITUACAO_CLIENTE (B-BLOQUEADO/A-ATIVO/C-CANCELADO)
- CLIENTE_CARTAO
ID_CLIENTE
ID_CARTAO
- COMPRA
ID_COMPRA
ID_LOJA
ID_CARTAO
DATA_DA_COMPRA
VALOR_DA_COMPRA
ID_FATURA
Qual a melhor maneira para fazer?
Grato.

Damaso.jr
   - 25 set 2015

Boa Tarde Renato,

Eu faria usando inner join, Faria desta forma

SELECT C.ID_CLIENTE AS 'Código Cliente', C.CPF AS 'CPF Cliente', CP.VALOR_ULTIMA_COMPRA AS 'Última Compra'
FROM CLIENTES C
INNER JOIN CLIENTE_CARTAO CC ON CLIENTE.ID_CLIENTE = CLIENTE_CARTAO.ID_CLIENTE
INNER JOIN COMPRA CP ON CLIENTE_CARTAO.ID_CARTAO = COMPRA.ID_CARTAO

Espero ter ajudado.

Renato Ranzani
   - 25 set 2015


Citação:
Boa Tarde Renato,

Eu faria usando inner join, Faria desta forma

SELECT C.ID_CLIENTE AS 'Código Cliente', C.CPF AS 'CPF Cliente', CP.VALOR_ULTIMA_COMPRA AS 'Última Compra'
FROM CLIENTES C
INNER JOIN CLIENTE_CARTAO CC ON CLIENTE.ID_CLIENTE = CLIENTE_CARTAO.ID_CLIENTE
INNER JOIN COMPRA CP ON CLIENTE_CARTAO.ID_CARTAO = COMPRA.ID_CARTAO

Espero ter ajudado.


Mas assim você não está trazendo o valor da última compra (baseado na DATA_DA_COMPRA da tabela COMPRA)!

Hector Figueroa
   - 26 set 2015

Renato, tenta esse ai

#Código

select cl.id_cliente, cl.cpf, cl.nome, co.valor_da_compra VALOR_ULTIMA_COMPRA
from TESTE_COMPRA co  
 inner join (select cc.id_cliente, co.id_cartao, max(co.data_da_compra) dataUltimaCompra
             from TESTE_COMPRA co
              inner join TESTE_CLIENTE_CARTAO cc on cc.id_cartao = co.id_cartao
             group by cc.id_cliente, co.id_cartao) ultimaCompra on ultimaCompra.id_cartao = co.id_cartao and ultimaCompra.dataUltimaCompra = co.data_da_compra
 inner join TESTE_CLIENTE cl on cl.id_cliente = ultimaCompra.id_cliente;