Primeira e Ultima Data de Pedido do Cliente

Delphi

10/07/2014

Ola, Pessoal , estou com o seguinte problema. Preciso pegar a primeira e ultima data dos pedidos dos clientes. So que preciso somente dos que tiveram o Primeiro e Ultimo Pedido no Mes/Ano Informado.
Exemplo: cliente teve o prim pedido em janeiro e o ultimo em fevereiro 2014..nao serve.
cliente teve o prim. pedido em junho e o ultimo em junho....este que preciso.

SELECT count(DISTINCT(CLIENTE)) AS TTCLIENTES,min(dtpedido) as menor,max(dtpedido) as maior FROM PEDIDOS
WHERE CANCELADO='N'
AND VENDEDOR = :XVEND
AND EXTRACT(YEAR FROM menor) =:XANO
AND EXTRACT(YEAR FROM menor) =:XANO
AND EXTRACT(MONTH FROM maior) =:XMES
AND EXTRACT(MONTH FROM maior) =:XMES


A Ideia e´ ter a QUANTIDADE DE CLIENTES desse vendedor que compraram pela primeira vez no mes.
Só que dessa forma da erro..coluna menor nao existe..

Grato pela ajuda
Tomas Raponi

Tomas Raponi

Curtidas 0

Respostas

Thiago Irrazabal

Thiago Irrazabal

10/07/2014

Boa tarde, já tentou usar Select From Select?
Aqui vai ele adaptado já:
SELECT TTCLIENTES, MENOR, MAIOR, ANO, MES
FROM (SELECT DISTINCT(COUNT(CLIENTE)) AS TTCLIENTES, MIN(DTPEDIDO) AS MENOR, MAX(DTPEDIDO) AS MAIOR, EXTRACT(YEAR FROM DTPEDIDO) AS ANO, EXTRACT(MONTH FROM DTPEDIDO) AS MES FROM PEDIDOS GROUP BY 4,5)
WHERE CANCELADO = 'N'
AND VENDEDOR = :XVEND
AND EXTRACT(YEAR FROM MENOR) = :XANO
AND EXTRACT(YEAR FROM MAIOR) = :XANO
AND EXTRACT(MONTH FROM MENOR) = :XMES
AND EXTRACT(MONTH FROM MAIOR) = :XMES




Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Tomas Raponi

Tomas Raponi

10/07/2014

SELECT TTCLIENTES, MENOR, MAIOR, ANO, MES
FROM (SELECT DISTINCT(COUNT(CLIENTE)) AS TTCLIENTES,
MIN(DTPEDIDO) AS MENOR, MAX(DTPEDIDO) AS MAIOR,
EXTRACT(YEAR FROM DTPEDIDO) AS ANO, EXTRACT(MONTH FROM DTPEDIDO) AS MES FROM PEDIDOS GROUP BY 4,5)
WHERE CANCELADO = 'N'
AND VENDEDOR = :XVEND
AND EXTRACT(YEAR FROM MENOR) = :XANO
AND EXTRACT(YEAR FROM MAIOR) = :XANO
AND EXTRACT(MONTH FROM MENOR) = :XMES
AND EXTRACT(MONTH FROM MAIOR) = :XMES

Thiago, gostei da ideia, so que da erro na linha 2.
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 7.
SELECT.

Tentei ver o que poderia ser, mas nao consegui (firebird 1.5, so para lembrar). Grato
GOSTEI 0
Thiago Irrazabal

Thiago Irrazabal

10/07/2014

Ta usando FireBird? Qual?
Tenta assim:
SELECT TTCLIENTES, MENOR, MAIOR, ANO, MES
FROM (SELECT DISTINCT(COUNT(CLIENTE)) AS TTCLIENTES,
MIN(DTPEDIDO) AS MENOR, MAX(DTPEDIDO) AS MAIOR,
EXTRACT(YEAR FROM DTPEDIDO) AS ANO, EXTRACT(MONTH FROM DTPEDIDO) AS MES FROM PEDIDOS
WHERE CANCELADO = 'N' AND VENDEDOR = :XVEND
GROUP BY 4,5)
WHERE EXTRACT(YEAR FROM MENOR) = :XANO
AND EXTRACT(YEAR FROM MAIOR) = :XANO
AND EXTRACT(MONTH FROM MENOR) = :XMES
AND EXTRACT(MONTH FROM MAIOR) = :XMES




Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Tomas Raponi

Tomas Raponi

10/07/2014

Thiago, como disse acima e´ o Firebird 1.5.

E o erro coninua o mesmo..parece que nao esta aceitando o que vem depois do ano, mes FROM (Select...

Ja tentei de tudo.
GOSTEI 0
Thiago Irrazabal

Thiago Irrazabal

10/07/2014

Acho que só foi implantado isso no Firebird 2.0 ou superior :/, faz o seguinte cria uma view e faz um select nela, ou uma procedure com uma tabla temporária, abraço.



Att,
Thiago Irrazabal de Oliveira
GOSTEI 0
Alex Lekao

Alex Lekao

10/07/2014

nao entendi muito bem.

somente a titulo de sugestao. rssr

nao daria certo utilizar o Between (acho que escrevi como escreve. kkkkk) e montar uma subselect para o primeiro e o ultimo(uma para cada um) usando top e top desc, se for necessario apresentar os dois?

No caso da diga do Thiago acredito que ajude tambem e muito.

talvez desenvolver algum tipo de procedure que saia montando tudo que vc precisa e agrupando e assim de o resultado esperado.

Espero ter ajudado.

Abraco.
GOSTEI 0
POSTAR