Jump to content
Daniel Martins Lobo

Trazer resultado do mês anterior

Recommended Posts

Olá a todos, fiz uma query que posteriormente precisarei colocar em um job, portanto preciso que a @DATA_I e @DATA_F gere de forma automática. O que eu preciso é pegar o primeiro dia do mês anterior e o dia atual -1 só que do mês anterior. Exemplo: Hoje é 12/05, então precisaria pegar de 01/04/2017 a 11/04/2017. 

O primeiro dia do mês anterior eu já sei como fazer, vou usar (SELECT CONVERT(VARCHAR, DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0),103)). O problema é pegar o mesmo dia atual -1 só que do mês anterior.

 

Abaixo está a minha query:

DECLARE @DATA_I DATE  = '01-04-2017'
DECLARE @DATA_F DATE = '11-04-2017'
              
SELECT SUM ( A.VENDA_BRUTA )                                                                 AS VENDA_BRUTA         , 
               SUM ( A.DESCONTO )                                                                        AS DESCONTO            , 
               SUM ( A.VENDA_LIQUIDA )                                                               AS VENDA_LIQUIDA       , 
              SUM ( A.IMPOSTOS )                                                                          AS IMPOSTOS            ,
              SUM ( A.QUANTIDADE * ISNULL ( B.CUSTO_CONTABIL , 0 ) )    AS CMV                 , 
              SUM ( CASE WHEN A.TIPO_BONIFICACAO = 'V' 
                     THEN A.QUANTIDADE * A.BONIFICACAO
                     ELSE A.VENDA_LIQUIDA * ( A.BONIFICACAO / 100 ) END ) AS BONIFICACAO         , 
             SUM ( CASE WHEN A.TIPO_COMISSAO = 'V' 
                     THEN A.QUANTIDADE * A.COMISSAO
                     ELSE A.VENDA_LIQUIDA * ( A.COMISSAO / 100 ) END )       AS COMISSAO            ,
          SUM ( A.VENDA_LIQUIDA ) - 
          SUM ( A.IMPOSTOS ) - 
          SUM ( A.QUANTIDADE * ISNULL ( B.CUSTO_CONTABIL , 0 ) )        AS LUCRO_BRUTO 


        FROM VENDAS_ANALITICAS                                              A WITH(NOLOCK)
          JOIN EMPRESAS_USUARIAS                                             X WITH(NOLOCK) ON X.EMPRESA_USUARIA   = A.EMPRESA

LEFT JOIN CUSTO_MEDIO_MENSAL_EMPRESA_CONTABIL B WITH(NOLOCK) ON B.PRODUTO                     = A.PRODUTO 
                                                                                                                                         AND B.EMPRESA_CONTABIL = X.EMPRESA_CONTABIL 
                                                                                                                                         AND B.MES = MONTH ( A.MOVIMENTO ) 
                                                                                                                                         AND B.ANO = YEAR  ( A.MOVIMENTO ) 
    WHERE A.MOVIMENTO >= @DATA_I AND 
          A.MOVIMENTO         <= @DATA_F AND
          X.REDE                        = 1

 

Share this post


Link to post
Share on other sites
DECLARE @DT_INI VARCHAR(10)
DECLARE @DT_FIM VARCHAR(10)

SET @DT_INI = CONVERT(VARCHAR,DATEADD(MM,DATEDIFF(MM,0,GETDATE())-1,0),103)
SET @DT_FIM = CONVERT(VARCHAR,DATEADD(DD,+(DAY(GETDATE()-2)),DATEADD(MM,DATEDIFF(MM,0,GETDATE())-1,0)),103)

SELECT @DT_INI, @DT_FIM

 

Share this post


Link to post
Share on other sites

Buenas,

 

Abaixo alguns exemplos de datas que utilizo.

select CONVERT(VARCHAR(25),DATEADD(yy,-1,DATEADD(mm,-1,DATEADD(dd,-(DAY(GETDATE())-1),GETDATE()))),112) -- Primeiro Dia do Mês Anterior e Ano Anterior 
select CONVERT(VARCHAR(25),DATEADD(yy,-1,DATEADD(mm,-1,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)))),112) -- Ultimo Dia Mês Anterior e Ano Anterior

select CONVERT(VARCHAR(25),DATEADD(mm,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),112) -- Primeiro Dia do Mês Anterior
select CONVERT(VARCHAR(25),DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)),112) -- Ultimo Dia Mês Anterior 

select CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(GETDATE())-1),GETDATE()),112) -- Primeiro_Dia_do_Mes_Atual
select CONVERT(VARCHAR(25),DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)),112) -- Ultimo Dia Mês Atual

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By AlanB.
      Olá, boa tarde! Eu estou com um problema e não consigo resolver. Alguem pode me ajudar?
      Eu tenho uma seção de serviços no site (inseri a imagem como anexo para que voces possam visualizar)
       
      Basicamente são 5 colunas em que cada uma tem uma imagem, um titulo, um quadradinho que abre uma lista e quando clica em algum item da lista, abre um popup com as informações daquele item. 
       
      Para tentar fazer isso com o php eu criei a tabela "servicos" com os campos:
       
      id
      titulo (pra inserir esses titulos abaixo da imagem) - adequação, estruturação, etc.
      lista - os titulos dos itens da lista
      popup - texto com os itens da lista 
       
      Eu adicionei os itens das listas de cada coluna no phpmyadmin e consegui fazer a função de editar e excluir certinho. Mas depois disso, preciso exibir as informações na index.php 
       
      Até agora tentei fazer somente a primeira coluna de "Adequação", vejam o código na index.php para exibir:
       
      <div class="col mb-4 p-3"> <div class="d-flex justify-content-center"> <img src="img/icones/adequacao.png" alt="Adequação"> </div> <p class="mt-3 titulobranco text-center">Adequação</p> <div class="servicos d-flex justify-content-center"> <ul class="nav"> <li class="nav-item dropdown"> <img class="quadrado nav-link" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" src="img/icones/quadrado.png" alt="Conscientização"> <div class="dropdown-menu dropdown-menu-personalizado" aria-labelledby="navbarDropdown"> <?php $titulo = "Adequação"; $sql = "SELECT * FROM servicos WHERE titulo = '$titulo'"; $sql = $pdo->query($sql); if($sql->rowCount()>0){ foreach($sql->fetchAll() as $servicos){ echo'<a class="dropdown-item textoservicos">'.$servicos['lista'].'<div style="float:right; color:#27B1F7;">&#43;</div></a>'; } } ?> </div> </li> </ul>' </div> </div> Eu não sei se esse código está certo, mas está funcionando. Ele está exibindo na primeira coluna "Adequação", os itens da lista desse respectivo titulo.
       
      Mas o popup não está funcionando, ao clicar em um item da lista deveria abrir o popup com o respectivo texto cadastrado naquele item, mas não está funcionando.
       
      Esse foi o código do popup que eu fiz:
       
      <? $titulo = "Adequação"; $sql = "SELECT * FROM servicos WHERE titulo = '$titulo' "; $sql = $pdo->query($sql); if($sql->rowCount()>0){ foreach($sql->fetchAll() as $servicos){ echo '<div id="modal-servicos" class="modal-container">'; echo '<div class="modaldentro">'; echo '<button class="fecharmodal">X</button>'; echo '<h3>'.$servicos['lista'].'</h3>'; echo '<p>'.$servicos['popup'].'</p>'; echo '</div>'; echo '</div>'; } } ?> Alguem pode me ajudar a corrigir o meu código e fazer funcionar?
       
      Obrigado

    • By Guiggs
      Fala, galera, preciso realizar a mesma lógica de cálculo da coluna F na imagem abaixo só que no sql server, porém, não faço ideia de qual função utilizar para realizar este cálculo entre linhas e colunas diferentes, sempre do dia anterior.
       

    • By Guiggs
      Boa tarde, Galera.
      Seguinte,
      Preciso de uma solução ou função para realizar o seguinte cálculo " (Backlog(dia anterior) + Abertos(dia atual)) - fechados(dia atual) = backlog(dia atual)" segue imagem da tabela abaixo. Nunca me deparei com esta situação de ter que calcular valores entre linhas de colunas diferentes. Li algo sobre Lead e Leg mas não consegui aplicar a solução ao que preciso, alguém consegue dar uma luz? Desde já, obrigado!! 
       

    • By Giovane Lopes
      Estou tentando fazer a seguinte SQL abaixo e o campo DATA_AGENDADA é um campo DATATIME, não consigo criar a contagem por dia, ele está contando por hora


      SELECT A.DATA_AGENDADA, count(A.DATA_AGENDADA) from os_agenda A where A.cod_empresa= 2 and A.data_agendada between ''20190901'' and ''20190930'' group by A.DATA_AGENDADA order by A.DATA_AGENDADA
    • By Webster Moitinho
      Estou tentando fazer o controle de acesso do meu site. Para tanto criei duas tabelas:
      Stat (Armazena cada sessao dos usuários
      Estrutura da tabela `stat`
      CREATE TABLE `stat` ( `id_stat` int(11) NOT NULL, `navegador` varchar(85) NOT NULL, `usuario` int(11) NOT NULL, `cep` varchar(7) NOT NULL, `ip_visitante` varchar(15) NOT NULL, `sessao` varchar(72) NOT NULL, `pais` varchar(30) NOT NULL, `estado` varchar(30) NOT NULL, `cidade` varchar(50) NOT NULL, `latitude` decimal(11,5) NOT NULL, `longitude` decimal(11,5) NOT NULL, `ip_meuservidor` varchar(72) NOT NULL, `hora_req` time NOT NULL, `origem` varchar(175) NOT NULL, `idioma` varchar(50) NOT NULL, `SERVER_ADMIN` varchar(90) NOT NULL, `servidor` varchar(90) NOT NULL, `visitada` longtext CHARACTER SET utf8 NOT NULL, `registro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Indexes for table `stat` ALTER TABLE `stat` ADD PRIMARY KEY (`id_stat`); -- AUTO_INCREMENT for table `stat` ALTER TABLE `stat` MODIFY `id_stat` int(11) NOT NULL AUTO_INCREMENT; sub_stat (Para armazenar as páginas visitadas e as interações com o cliente:
      CREATE TABLE `sub_stat` ( `id_substat` int(11) NOT NULL, `sessao` varchar(72) NOT NULL, `hora_req` time NOT NULL, `origem` varchar(85) NOT NULL, `visitada` varchar(85) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Indexes for table `sub_stat` ALTER TABLE `sub_stat` ADD PRIMARY KEY (`id_substat`); -- AUTO_INCREMENT for table `sub_stat` ALTER TABLE `sub_stat` MODIFY `id_substat` int(11) NOT NULL AUTO_INCREMENT; O desejado portanto, seria que quando o usuário entrasse na página, o script localizasse a sessão do usuário, buscaria a sessão na tabela stat, caso não existisse, iria inserir o registro tanto na tabela stat, quanto na tabela sub_stat. Se existisse a sessão na tabela stat, então somente haveria inserção dos registros na tabela sub_stat. Eu não estou conseguindo executar a segunda consulta, que vai popular a tabela sub_stat.
       
      Meu código está assim:
       
      $sql = "SELECT sessao FROM stat WHERE sessao = '$sessao'"; $prepara = $PDO->prepare( $sql ); $prepara->execute(); $login_check = $prepara->rowCount(); if($login_check < 1){ $sql = "INSERT INTO `stat` (`id_stat`, `navegador`, `usuario`, `cep`, `ip_visitante`, `sessao`, `pais`, `estado`, `cidade`, `latitude`, `longitude`, `ip_meuservidor`, `hora_req`, `origem`, `idioma`, `servidor`, `visitada`, `registro`) VALUES (NULL, '$navegador', '$usuario', '$cep', '$meuip', '$sessao', '$pais', '$estado', '$cidade', '$lat', '$long', '$ip', '$hora_req', '$origem', '$idioma', '$servidor', '$visitada', '$registro')"; $compile = $PDO->prepare($sql); $vai = $compile->execute(); $sql2 = "INSERT INTO `sub_stat` (`id_substat`, `sessao`, `hora_req`, `origem`, `visitada`) VALUES (NULL, '$sessao', '$hora_req', '$origem', '$visitada'"; $compile2 = $PDO->prepare($sql2); $vai = $compile2->execute(); } else { $sql = "INSERT INTO `sub_stat` (`id_substat`, `sessao`, `hora_req`, `origem`, `visitada`) VALUES (NULL, '$sessao', '$hora_req', '$origem', '$visitada'"; $compile = $PDO->prepare($sql); $vai = $compile->execute(); }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.