Como faco para puxar dados do mes anterior

27/08/2007

0

Ola gostaria de saber como faco para puxar dados do mes anterior, caso digite o periodo de 01/02/2006 a 28/02/2006 ele me retorne as informacoes do mes atual e do mes janeiro.

segue a estrutura do sql..

SELECT
´-1´ AS PAGINA,
ISNULL(TABS.MES,0) AS MES,
CREDITO_ANTERIOR,
SUM(ISNULL(BASE_CALCULO,0)) AS BASE_CALCULO,
SUM(ISNULL(TOTAL_SAIDAS,0)) AS TOTAL_SAIDAS,
SUM(BASE_CREDITO) AS BASE_CREDITO


FROM (
SELECT
MES,
SUM(BASE_CALCULO) AS BASE_CALCULO,
SUM(TOTAL_SAIDAS) AS TOTAL_SAIDAS
FROM (
SELECT
--MONTH(S.DATA_EMISSAO)AS MES,
MONTH(S.DATA_REG)AS MES,
SITR.VALOR_BASE AS BASE_CALCULO,
SI.VALOR_ITEM_CONTABIL AS TOTAL_SAIDAS

FROM TBLIVROREGES S
INNER JOIN TBLIVROREGESITEM SI
ON S.CHAVE_FATO = SI.CHAVE_FATO AND
SI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB SITR
ON SI.CHAVE_FATO = SITR.CHAVE_FATO AND
SI.NUM_ITEM = SITR.NUM_ITEM AND
SI.NUM_SUBITEM = SITR.NUM_SUBITEM AND
SITR.COD_IMPOSTO = ´ICMS´
INNER JOIN TBCFOP CFOP
ON CFOP.COD_CFOP = SI.COD_CFOP
INNER JOIN TBLOTEESCRITA LE
ON S.COD_FILIAL = LE.COD_FILIAL AND S.COD_LOTE = LE.COD_LOTE AND LE.TIPO_ES = ´S´

WHERE
S.DATA_REG BETWEEN ´1901-01-01´ AND ´1902-02-02´ AND
CFOP.TIPO_ORIGEM_DESTINO IN (´F´) AND S.STATUS <> ´C´) TABS
GROUP BY MES) TABS

FULL OUTER JOIN

(SELECT
MES,
SUM(BASE_CREDITO) AS BASE_CREDITO,
(SELECT
SUM(isnull(EITR.VALOR_IMPOSTO,0)) AS CREDITO_ANTERIOR --+isnull(EITR.VALOR_OUTRAS,0)) AS CREDITO_ANTERIOR

FROM TBLIVROREGES E
INNER JOIN TBLIVROREGESITEM EI
ON E.CHAVE_FATO = EI.CHAVE_FATO AND
EI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB EITR
ON EI.CHAVE_FATO = EITR.CHAVE_FATO AND
EI.NUM_ITEM = EITR.NUM_ITEM AND
EI.NUM_SUBITEM = EITR.NUM_SUBITEM AND
EITR.COD_IMPOSTO = ´ICMS´

WHERE
E.DATA_REG < ´1901-01-01´ AND
EI.COD_CFOP IN (´PRM1´) AND E.STATUS <> ´C´
) AS CREDITO_ANTERIOR



FROM (
SELECT
MONTH(E.DATA_REG) AS MES,
isnull(EITR.VALOR_IMPOSTO,0) AS BASE_CREDITO --+isnull(EITR.VALOR_OUTRAS,0) AS BASE_CREDITO
FROM TBLIVROREGES E
INNER JOIN TBLIVROREGESITEM EI
ON E.CHAVE_FATO = EI.CHAVE_FATO AND
EI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB EITR
ON EI.CHAVE_FATO = EITR.CHAVE_FATO AND
EI.NUM_ITEM = EITR.NUM_ITEM AND
EI.NUM_SUBITEM = EITR.NUM_SUBITEM AND
EITR.COD_IMPOSTO = ´ICMS´
INNER JOIN TBCFOP CFOP
ON CFOP.COD_CFOP = EI.COD_CFOP
WHERE
E.DATA_REG BETWEEN CAST(CAST(DATEPART(YEAR,´1901-01-01´) AS CHAR (4))+´-01-01´ AS DATETIME) AND ´1902-02-02´ AND
CFOP.Tipo_ES = ´E´ AND EI.COD_CFOP IN (´PRM1´) AND E.STATUS <> ´C´) TABE



GROUP BY MES) TABE

ON TABS.MES = TABE.MES

GROUP BY
TABS.MES,
TABE.CREDITO_ANTERIOR

order by TABS.MES


valewss


Dzkbrasil

Dzkbrasil

Responder

Posts

27/08/2007

Emerson Nascimento

antes que qualquer coisa, vamos tentar simplificar aquela instrução.

teste com esta e veja se obtém o mesmo resultado e se há melhora na performance (não tenho como testar):
SELECT
  ´-1´ PAGINA,
  MONTH(LR.DATA_REG) MES,
  SUM(CASE WHEN CFOP.TIPO_ORIGEM_DESTINO IN (´F´)
                AND LE.TIPO_ES = ´S´ -- LE.?? não poderia ser LR. ou CFOP.???
           THEN LRIT.VALOR_BASE
           ELSE 0.0 END) BASE_CALCULO,
  SUM(CASE WHEN CFOP.TIPO_ORIGEM_DESTINO IN (´F´)
                AND LE.TIPO_ES = ´S´  -- LE.?? não poderia ser LR. ou CFOP.???
           THEN LRI.VALOR_ITEM_CONTABIL
           ELSE 0.0 END) TOTAL_SAIDAS,
  SUM(CASE WHEN EI.COD_CFOP IN (´PRM1´)
                AND CFOP.TIPO_ES = ´E´
           THEN LRIT.VALOR_IMPOSTO
           ELSE 0.0 END) BASE_CREDITO,
  (SELECT
     SUM(ISNULL(EITR.VALOR_IMPOSTO,0.0))
   FROM
     TBLIVROREGES E
   INNER JOIN TBLIVROREGESITEM EI
     ON EI.CHAVE_FATO = E.CHAVE_FATO AND
        EI.NUM_SUBITEM = 0
   INNER JOIN TBLIVROREGESITEMTRB EITR
     ON EITR.CHAVE_FATO = EI.CHAVE_FATO AND
        EITR.NUM_ITEM = EI.NUM_ITEM AND
        EITR.NUM_SUBITEM = EI.NUM_SUBITEM AND
        EITR.COD_IMPOSTO = ´ICMS´
   WHERE
     E.DATA_REG < ´1901-01-01´ AND E.TIPO_ES = ´E´ AND
     EI.COD_CFOP IN (´PRM1´) AND E.STATUS <> ´C´
   ) CREDITO_ANTERIOR
FROM
  TBLIVROREGES LR
INNER JOIN TBLIVROREGESITEM LRI
  ON LRI.CHAVE_FATO = LR.CHAVE_FATO AND LRI.NUM_SUBITEM = 0
INNER JOIN TBLIVROREGESITEMTRB LRIT
  ON LRIT.CHAVE_FATO = LRI.CHAVE_FATO AND
     LRIT.NUM_ITEM = LRI.NUM_ITEM AND
     LRIT.NUM_SUBITEM = LRI.NUM_SUBITEM AND
     LRIT.COD_IMPOSTO = ´ICMS´
INNER JOIN TBCFOP CFOP
  ON CFOP.COD_CFOP = LRI.COD_CFOP
LEFT JOIN TBLOTEESCRITA LE -- faz sentido utilizar esta tabela?
  ON LE.COD_FILIAL = LR.COD_FILIAL AND
     LE.COD_LOTE = LR.COD_LOTE AND LR.TIPO_ES = ´S´
WHERE
  LR.DATA_REG BETWEEN ´1901-01-01´ AND ´1902-02-02´ AND
  LR.STATUS <> ´C´
GROUP BY
  MONTH(LR.DATA_REG)



Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar