[firebase-br] Ajuda pra montar um SQL mais rápido

Eduardo Pelizzari de Andrade eduardoandrade em persoft.com.br
Qui Fev 21 16:54:47 -03 2008


Desculpe Felipe, mas o SQL abaixo não retorna a mesma coisa que o seu?

SELECT vp2.data_emissao, vp2.data_faturamento ,
      VP2.idvenda_pedido , C.STATUS ,VP2.IDCLIENTE,
      C.RAZAO_SOCIAL, prod.idgrupo, prod.idsubgrupo , prod.referencia, 
prod.descricao,
      vpi.preco_unit, vpi.qnt, vp2.idrepresentante , rep.nome, gru.descricao 
as fk_nomegru,
      ( vpi.preco_unit * vpi.qnt ) as fk_total,
      sub.descricao as fk_nomesub,
      ( SELECT FIRST 1 CC.TELEFONE  FROM CLIENTE_CONTATOS CC
        WHERE CC.IDCLIENTE = VP2.IDCLIENTE  ) AS FK_FONE,
      ( SELECT FIRST 1 CC.NOME FROM CLIENTE_CONTATOS CC
        WHERE CC.IDCLIENTE = VP2.IDCLIENTE  ) AS FK_CONTATO ,
      C.CIDADE , C.ENDERECO
FROM VENDA_PEDIDO VP2
inner JOIN CLIENTE C ON (C.IDCLIENTE = VP2.IDCLIENTE)
inner OIN venda_pedido_itens VPI ON (vpi.idvenda_pedido = VP2.idvenda_pedido )
left JOIN produto prod ON (prod.idproduto = VPi.idproduto )
left JOIN grupo gru ON ( gru.idgrupo = prod.idgrupo )
left JOIN sub_grupo sub ON ( sub.idsub_grupo = prod.idsubgrupo )
left JOIN representante rep ON ( rep.idrepresentante = vp2.idrepresentante )
WHERE C.STATUS =  'A'
  AND VP2.DATA_EMISSAO BETWEEN :PDATA1 AND :PDATA2 




Fellipe Henrique escreveu:
> Olá amigos, tenho um SQL, porém ele demora muito pra retornar os dados, já 
> tentei adicionar indices e nada. O que eu quero, é trazer os clientes 
> ATIVOS,  QUE COMPRARAM, UM DETERMINADO PRODUTO  em um determinado periodo. 
> segue o meu SQL, hoje ele demora por volta de uns 2 minutos pra trazer  no 
> máximo uns 10 registros. Se alguém puder me ajudar ficarei extremamente 
> grato.
>
> Desde já agradeço
> Fellipe H.
>
> SQL:
> SELECT vp2.data_emissao, vp2.data_faturamento ,
>       VP2.idvenda_pedido , C.STATUS ,VP2.IDCLIENTE,
>       C.RAZAO_SOCIAL, prod.idgrupo, prod.idsubgrupo , prod.referencia, 
> prod.descricao,
>       vpi.preco_unit, vpi.qnt, vp2.idrepresentante , rep.nome, gru.descricao 
> as fk_nomegru,
>       ( vpi.preco_unit * vpi.qnt ) as fk_total,
>       sub.descricao as fk_nomesub,
>       ( SELECT FIRST 1 CC.TELEFONE  FROM CLIENTE_CONTATOS CC
>         WHERE CC.IDCLIENTE = VP2.IDCLIENTE  ) AS FK_FONE,
>       ( SELECT FIRST 1 CC.NOME FROM CLIENTE_CONTATOS CC
>         WHERE CC.IDCLIENTE = VP2.IDCLIENTE  ) AS FK_CONTATO ,
>       C.CIDADE , C.ENDERECO
> FROM VENDA_PEDIDO VP2
> LEFT JOIN CLIENTE C ON (C.IDCLIENTE = VP2.IDCLIENTE)
> LEFT JOIN venda_pedido_itens VPI ON (vpi.idvenda_pedido = 
> VP2.idvenda_pedido )
> LEFT JOIN produto prod ON (prod.idproduto = VPi.idproduto )
> LEFT JOIN grupo gru ON ( gru.idgrupo = prod.idgrupo )
> LEFT JOIN sub_grupo sub ON ( sub.idsub_grupo = prod.idsubgrupo )
> LEFT JOIN representante rep ON ( rep.idrepresentante = vp2.idrepresentante )
> WHERE ( VP2.IDCLIENTE IN( SELECT VP1.IDCLIENTE FROM VENDA_PEDIDO_ITENS VPI1
>                           LEFT JOIN VENDA_PEDIDO VP1 ON (VP1.IDVENDA_PEDIDO 
> = VPI1.IDVENDA_PEDIDO)
>                           LEFT JOIN PRODUTO P1 ON (P1.IDPRODUTO = 
> VPI1.IDPRODUTO)
>                           WHERE ( VP1.DATA_EMISSAO BETWEEN :PDATA1 AND 
> :PDATA2 ) )
>   AND ( C.STATUS =  'A')
>   AND ( VP2.DATA_EMISSAO BETWEEN :PDATA1 AND :PDATA2 )
>
>
> As tabelas principais:
>
> CREATE TABLE VENDA_PEDIDO (
>     IDVENDA_PEDIDO     INTEGER NOT NULL,
>     DATA_CADASTRO      DATE NOT NULL,
>     DATA_EMISSAO       DATE NOT NULL,
>     DATA_FATURAMENTO   DATE,
>     HORA_FATURAMENTO   TIME,
>     PROGRAMADO         CHAR(1) COLLATE PXW_INTL850,
>     STATUS             CHAR(1) NOT NULL COLLATE PXW_INTL850,
>     TIPO_PEDIDO        CHAR(1) COLLATE PXW_INTL850,
>     TIPO_NOTA          CHAR(1) COLLATE PXW_INTL850,
>     IDCLIENTE          INTEGER NOT NULL,
>     IDFUNCIONARIO      INTEGER,
>     IDREPRESENTANTE    INTEGER,
>     IDVENCIMENTO       INTEGER,
>     IDCFOP             INTEGER,
>     IDBANCO            INTEGER,
>     IDTRANPORTADORA    INTEGER,
>     TRANS_TIPOFRETE    SMALLINT,
>     TRANS_VOL_QNT      D_QNT,
>     TRANS_VOL_ESPECIE  VARCHAR(10) COLLATE PXW_INTL850,
>     TRANS_VOL_MARCA    VARCHAR(10) COLLATE PXW_INTL850,
>     TRANS_VOL_NUM      VARCHAR(10) COLLATE PXW_INTL850,
>     TRANS_VOL_PESOBRU  D_QNT,
>     TRANS_VOL_PESOLIQ  D_QNT,
>     TRANS_IDMENSAGEM   INTEGER,
>     TRANS_MENSAGEM     BLOB SUB_TYPE 1 SEGMENT SIZE 80,
>     PERC_DESC          D_DINHEIRO NOT NULL,
>     VLR_DESC           D_DINHEIRO NOT NULL,
>     PERC_ACREC         D_DINHEIRO NOT NULL,
>     VLR_ACREC          D_DINHEIRO NOT NULL,
>     VLR_BASE_CALC      D_DINHEIRO,
>     VLR_BASE_ST        D_DINHEIRO,
>     VLR_ICMS_ST        D_DINHEIRO,
>     VLR_ICMS           D_DINHEIRO,
>     VLR_PRODUTO        D_DINHEIRO NOT NULL,
>     VLR_TOTAL          D_DINHEIRO NOT NULL,
>     QNT_TOTAL_PROD     INTEGER,
>     ENTR_LOGRADOURO    D_ENDERECO,
>     ENTR_BAIRRO        D_BAIRRO,
>     ENTR_CIDADE        D_CIDADE,
>     ENTR_CEP           D_CEP,
>     ENTR_UF            CHAR(2) COLLATE PXW_INTL850,
>     ENTR_PONTOREF      D_DESCRICAO,
>     FRETE              D_DINHEIRO,
>     SEGURO             D_DINHEIRO,
>     OUTRAS_DESP        D_DINHEIRO,
>     PERC_COMISSAO      D_DINHEIRO,
>     VLR_COMISSAO       D_DINHEIRO,
>     MAO_OBRA           D_DINHEIRO,
>     PERC_ISS           D_DINHEIRO,
>     VLR_ISS            D_DINHEIRO,
>     IPI                D_DINHEIRO,
>     OBS                BLOB SUB_TYPE 1 SEGMENT SIZE 80,
>     IDCAIXA            INTEGER,
>     IDCONTA_RECEBER    INTEGER,
>     FRENTE_CAIXA       SMALLINT,
>     TIPO_FRETE         SMALLINT,
>     NUM_NOTA           VARCHAR(10) COLLATE PXW_INTL850,
>     TOTAL_PRECO_CUSTO  D_DINHEIRO,
>     PERC_LUCRO         D_DINHEIRO,
>     IDCFOP_SERV        INTEGER,
>     IDPEDIDO_INTERNO   INTEGER,
>     MARCAPEDIDO        VARCHAR(1)
> );
>
>
> CREATE TABLE VENDA_PEDIDO_ITENS (
>     IDVENDA_PEDIDO_ITENS        INTEGER NOT NULL,
>     IDVENDA_PEDIDO              INTEGER NOT NULL,
>     IDPRODUTO                   INTEGER NOT NULL,
>     IDCFOP                      INTEGER,
>     PEDIDO_PROGRAMADO           CHAR(1) COLLATE PXW_INTL850,
>     QNT                         D_QNT NOT NULL,
>     QNT_PENDENTE                D_QNT,
>     QNT_DEVOLVIDA               D_QNT,
>     PRECO_UNIT                  D_DINHEIRO NOT NULL,
>     PRECO_CUSTO                 D_DINHEIRO,
>     PERC_DESC                   D_DINHEIRO,
>     VLR_DESC                    D_DINHEIRO,
>     PERC_ACREC                  D_DINHEIRO,
>     VLR_ACREC                   D_DINHEIRO,
>     VALOR_TOTAL                 D_DINHEIRO NOT NULL,
>     SI_PERC_BASE_CALC           D_DINHEIRO,
>     SI_VLR_BASE_CALC            D_DINHEIRO,
>     SI_FRETE                    D_DINHEIRO,
>     SI_SEGURO                   D_DINHEIRO,
>     SI_OUTRAS_DESP              D_DINHEIRO,
>     SI_MAO_OBRA                 D_DINHEIRO,
>     SI_VLR_ICMS                 D_DINHEIRO,
>     SI_VLR_DESC                 D_DINHEIRO,
>     SI_VLR_ACREC                D_DINHEIRO,
>     SI_VLR_IPI                  D_DINHEIRO,
>     SI_ALIQUOTA                 D_DINHEIRO,
>     SI_CST                      CHAR(3) COLLATE PXW_INTL850,
>     SI_COD_TRIB                 CHAR(1) COLLATE PXW_INTL850,
>     SI_NUM_ITEM                 SMALLINT,
>     SI_ST_ALIQ                  D_DINHEIRO,
>     SI_ST_BASE                  D_DINHEIRO,
>     SI_ST_ICMS                  D_DINHEIRO,
>     ULT_CUSTO_MEDIO_PROD        D_DINHEIRO,
>     PRECO_CUSTO_MEDIO           D_DINHEIRO,
>     PERC_COMIS_PROD             D_DINHEIRO,
>     VLR_COMIS_PROD              D_DINHEIRO,
>     IDCOD_TRIBUTARIO_ALIQUOTAS  INTEGER
> );
>
>
>
>
> /******************************************************************************/
> /****                             Primary Keys 
> ****/
> /******************************************************************************/
>
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT PK_VENDA_PEDIDO PRIMARY KEY 
> (IDVENDA_PEDIDO);
> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT PK_VENDA_PEDIDO_ITENS PRIMARY 
> KEY (IDVENDA_PEDIDO_ITENS);
>
>
> /******************************************************************************/
> /****                             Foreign Keys 
> ****/
> /******************************************************************************/
>
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_1 FOREIGN KEY 
> (IDCLIENTE) REFERENCES CLIENTE (IDCLIENTE);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_2 FOREIGN KEY 
> (IDREPRESENTANTE) REFERENCES REPRESENTANTE (IDREPRESENTANTE);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_3 FOREIGN KEY 
> (IDVENCIMENTO) REFERENCES VENCIMENTO (IDVENCIMENTO);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_4 FOREIGN KEY 
> (IDCFOP) REFERENCES CFOP (IDCFOP);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_5 FOREIGN KEY 
> (IDTRANPORTADORA) REFERENCES TRANSPORTADORA (IDTRANSPORTADORA);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_6 FOREIGN KEY 
> (IDFUNCIONARIO) REFERENCES FUNCIONARIO (IDFUNCIONARIO);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_7 FOREIGN KEY 
> (TRANS_IDMENSAGEM) REFERENCES MENSAGEM (IDMENSAGEM);
> ALTER TABLE VENDA_PEDIDO ADD CONSTRAINT FK_VENDA_PEDIDO_8 FOREIGN KEY 
> (IDCFOP_SERV) REFERENCES CFOP (IDCFOP);
> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_1 
> FOREIGN KEY (IDVENDA_PEDIDO) REFERENCES VENDA_PEDIDO (IDVENDA_PEDIDO) ON 
> DELETE CASCADE;
> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_2 
> FOREIGN KEY (IDPRODUTO) REFERENCES PRODUTO (IDPRODUTO);
> ALTER TABLE VENDA_PEDIDO_ITENS ADD CONSTRAINT FK_VENDA_PEDIDO_ITENS_3 
> FOREIGN KEY (IDCOD_TRIBUTARIO_ALIQUOTAS) REFERENCES COD_TRIBUTARIO_ALIQUOTAS 
> (IDCOD_TRIBUTARIO_ALIQUOTAS); 
>
>
>
>
>   
> ------------------------------------------------------------------------
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> ------------------------------------------------------------------------
>
> No virus found in this incoming message.
> Checked by AVG Free Edition. 
> Version: 7.5.516 / Virus Database: 269.20.9/1290 - Release Date: 20/02/2008 20:45
>   

-- 
Eduardo Pelizzari de Andrade
Persoft Softwares Aplicativos
Fone: 55 11 62218061





Mais detalhes sobre a lista de discussão lista