Usar parametro calculado em clausulas where e order by

5 respostas
mateusviccari

Como fazer isso

select cli.nome,(select dataUltimaVenda from venda where idCliente=cli.idCliente) as dataVenda
from cliente cli
order by dataVenda

Sendo que na terceira linha ele da erro dizendo que nao encontrou a coluna dataVenda?

5 Respostas

drsmachado

Temos muitas situações parecidas aqui.
Resolvemos, quase sempre, desta forma:

SELECT
nome, 
dataVenda 
FROM 
(select 
cli.nome as nome, 
(select dataUltimaVenda from venda where idCliente=cli.idCliente) as dataVenda FROM cliente cli) ORDER BY dataVenda

Isso deve funcionar.

mateusviccari

Ja tinha tendado essa forma, infelizmente isso não funciona com firebird 1.5, que é o banco de dados que estamos usando aqui…

Fabiano_Abreu

Olá mateusviccari,

A instrução utilizada realmente não funcionará, pois, dataVenda é um alias gerado em tempo de execução. Existem bancos de dados que aceitam esta operação, por mais que ela não siga os padrões SQL.

Tente fazer sua consulta com inner join, agrupando por cliente e última venda.

Abraços.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

drsmachado

Por isso que eu não uso firebird, jamais.

mateusviccari

eu tambem nunca mais vou usar, mas é que o sistema ja tem quase 10 anos e até migrarmos pra postgres e java vai levar um bom tempo ainda…

Criado 20 de novembro de 2012
Ultima resposta 20 de nov. de 2012
Respostas 5
Participantes 3