Duvida Urgente Sql Firebird 1.5

Firebird

11/07/2014

Pessoal, preciso saber se a Menor Data e a Maior data estao no mesmo MES/ANO

select distinct(cliente),min(dtpedido) as menor ,max(dtpedido) as maior,VENDEDOR,
(select EXTRACT(YEAR FROM menor) = :XANO
AND EXTRACT(MONTH FROM menor) =:XMES
and EXTRACT(YEAR FROM maior) =:XANO
AND EXTRACT(MONTH FROM maior) =:XMES ) from pedidos)
WHERE VENDEDOR = :XVEND

ou seja, preciso que tanto a menor como a maior data selecionada estejam no mesmo mes, ano.
tento executar mais da diversos erros, entre eles erro onde tem o =.


Trabalho com delphi 7, firebird 1.5

Agradeco muito a ajuda
Tomas Raponi

Tomas Raponi

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

11/07/2014

Não sei se entendi bem sua necessidade, mas teste o seguinte:
SELECT
	DISTINCT(CLIENTE) AS CLIENTE, MIN(DTPEDIDO) AS MENOR, MAX(DTPEDIDO) AS MAIOR, VENDEDOR,
WHERE
	EXTRACT(YEAR FROM MIN(DTPEDIDO)) = EXTRACT(YEAR FROM MAX(DTPEDIDO))
	AND
	EXTRACT(MONTH FROM MIN(DTPEDIDO)) = EXTRACT(MONTH FROM MAX(DTPEDIDO))
	AND
	EXTRACT(YEAR FROM MIN(DTPEDIDO)) = :XANO
	AND
	EXTRACT(MONTH FROM MIN(DTPEDIDO)) = :XMES
	AND
	VENDEDOR = :XVEND


Obs.: fiz em um editor de texto simples, então pode conter erros de sintaxe.
GOSTEI 0
Tomas Raponi

Tomas Raponi

11/07/2014

SELECT
COUNT(DISTINCT(CLIENTE)) AS CLIENTE, MIN(DTPEDIDO) AS MENOR, MAX(DTPEDIDO) AS MAIOR, VENDEDOR FROM PEDIDOS
WHERE
EXTRACT(YEAR FROM MIN(DTPEDIDO)) = EXTRACT(YEAR FROM MAX(DTPEDIDO))
AND
EXTRACT(MONTH FROM MIN(DTPEDIDO)) = EXTRACT(MONTH FROM MAX(DTPEDIDO))
AND
EXTRACT(YEAR FROM MIN(DTPEDIDO)) = :XANO
AND
EXTRACT(MONTH FROM MIN(DTPEDIDO)) = :XMES
AND
VENDEDOR = :XVEND


Joel, da erro
Cannot use an agregate function in a where Clause, use having instead

obs..coloqueio o count e from pedidos, mas a ideia penso que seria essa mesmo
GOSTEI 0
Thiago Irrazabal

Thiago Irrazabal

11/07/2014

SELECT DISTINCT(CLIENTE) AS CLIENTE, MIN(DTPEDIDO) AS MENOR, MAX(DTPEDIDO) AS MAIOR, VENDEDOR
FROM PEDIDOS
GROUP BY 1,4
HAVING
EXTRACT(YEAR FROM MIN(DTPEDIDO)) = EXTRACT(YEAR FROM MAX(DTPEDIDO))
AND EXTRACT(MONTH FROM MIN(DTPEDIDO)) = EXTRACT(MONTH FROM MAX(DTPEDIDO))
AND EXTRACT(YEAR FROM MIN(DTPEDIDO)) = :XANO
AND EXTRACT(MONTH FROM MIN(DTPEDIDO)) = :XMES
AND VENDEDOR = :XVEND




Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Tomas Raponi

Tomas Raponi

11/07/2014

Caro Thiago.

Te agradeco muito a solucao apresentada.

Funcionou perfeitamente como eu precisava.

Abraco.

Tomas Raponi
GOSTEI 0
William

William

11/07/2014

Finalizando o tópico!!!
GOSTEI 0
POSTAR