Fórum Firebird Consulta #59048

01/11/2007

0

Pessoal essa consulta esta funcionando, mas esta muito lenta.
2 minutos:

A função dela é a seguinte:
Selecionar todos os clientes no intervalo especifico, e verificar se é a primeira vez que o cliente esta pagando, ou seja, se tem algum lançamento do cliente anterior a data de lançamento do registro atual.
Se alguem puder me ajudar.
Abraços.

SELECT
cx_datamov,
cx.CX_CLIENTE,
cx.CX_COBRADOR,
CLI_NOME,
COB_NOME,
(SELECT count(VCX_CLIENTE) FROM VCX_TOTAL
WHERE (VCX_DATAMOV < CX_DATAMOV) AND (VCX_CLIENTE=CX_CLIENTE)
)AS ULTIMO
FROM
CX
LEFT JOIN CLI ON CLI_CODIGO=CX_CLIENTE
LEFT JOIN COB ON COB_CODIGO=CX_COBRADOR

WHERE
(not CLI_CODIGO is null) and
(CX_DATAMOV >= :P1) AND
(CX_DATAMOV <= :P2)

Tabelas:

CREATE TABLE CX (
CX_CODIGO INTEGER NOT NULL,
CX_DATAMOV DATE,
CX_VALORMOV DM_CURRENCY,
CX_CLIENTE VARCHAR(9) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
CX_COBRADOR VARCHAR(2) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
CX_USUARIO VARCHAR(20) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
);

Visões:

CREATE VIEW VCX_TOTAL(
VCX_CODIGO,
VCX_DATAMOV,
VCX_CLIENTE)
AS
SELECT
CX_CODIGO,
CX_DATAMOV,
CX_CLIENTE
FROM CX
;


Germano

Germano

Responder

Posts

02/11/2007

Sremulador

amigo, o problema esta no left join..., você deve ainda verificar se os campos são indexados...


Responder

Gostei + 0

03/11/2007

Sql.pedrojr

Elimine o uso da view, uma vez que ela não usa indice


SELECT ...,

(SELECT count(VCX_CLIENTE) FROM CX AS CX2
WHERE (CX2.CX_DATAMOV < CX_DATAMOV) AND
(CX2.CX_CLIENTE = CX_CLIENTE) )AS ULTIMO
FROM ...


Responder

Gostei + 0

03/11/2007

Sql.pedrojr

ficou um erro na codigo

no lugar de count(VCX_CLIENTE) é count(CX2.CX_CLIENTE)


Responder

Gostei + 0

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

Aceitar