[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