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 FabianoSouza
      Pessoal, por que essa query com COLLATE  não funciona?
      declare @strPesquisa varchar(30) SET @strPesquisa = 'naicle' SET @sql = 'SELECT ' SET @sql = @sql + 'ML.nome ' SET @sql = @sql + 'FROM ' SET @sql = @sql + 'dbo.minhaTab AS ML ' SET @sql = @sql + ' WHERE ' SET @sql = @sql + ' nome LIKE ' SET @sql = @sql + '''%' + @strPesquisa COLLATE Latin1_General_CI_AI + '%''' EXEC (@sql) Não acusa erro ao rodar.
      Mas não traz os registro porque está gravado como "naiclê" (com acento), o que significa que não está aplicando a COLLATE.
       
      Montando essa mesma query mas da forma tradicional, o COLLATE funciona.
       
      SELECT ML.nome FROM dbo.minhaTab AS ML WHERE nome LIKE '%'+ @strPesquisa COLLATE Latin1_General_CI_AI+'%'  
       
    • By peterstefan
      Olá, estou com uma query aqui e preciso pegar de 2 campos diferentes os dados diferente de 0,  mais quanto tento no AND ele somente traz um resultado, o OR ele traz um dos campos com o valor 0, teria alguma forma de pegar os dados diferente de 0 dos dois campus?
      preciso pegar o idOrganizador diferente de 0 e o idPiloto diferente de 0 
       
      SELECT * FROM boletos WHERE proc = 0 AND idOrganizador !='0' AND idPiloto ='0';  
    • By mamotinho
      oi pessoal estou com um problema , não estou conseguindo passar todos os valores o foreach no json_encode() alguém poderia me ajudar, eu estou tentando monta um mecanismo de refresh em tempo real de uma lista de notificação veja abaixo:
       
      <script type="text/javascript"> function make_call() { // Fazendo requisição AJAX $j.post('teste.php', function (frase) { // Exibindo frase $j('#listas').html('<i>' + frase + '</i>'); }, 'JSON'); setTimeout(function(){ make_call(); }, 5000); } </script>
      Aqui é o arquivo que quero enviar para a div #lists
       
      <?php require("conexao/directory.php"); $notificar = $db->query("select TOP 5 * from Techi7CP.dbo.cabal_notificacao_geral order by regdate desc"); $notificacao = $notificar->fetchAll(); $count_notificacao = abs($notificar->rowCount()); if($count_notificacao==0){ echo '<li style="text-align:center;">não existe notificações no momento.</li>'; }else{ foreach($notificacao as $notif){ $consulta_conta = $db->query("select * from account.dbo.cabal_auth_table where UserNum='".$notif['usernum']."'")->fetchObject(); switch($notif['acao']){ case 'logadopremiado' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle red small">redeem</span>'.$notif['jogador'].' ganhou no Logado Premiado</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'mudarsenha' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle teal small">vpn_key</span>'.$consulta_conta->Nome.' alterou sua senha</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'distribuirpontos' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle cyan small">control_point</span>'.$notif['jogador'].' distribuiu seus pontos</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'girodasorte' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle brown small">star_border</span>'.$consulta_conta->Nome.' usou o giro da sorte</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'sistematpoint' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle green small">golf_course</span>'.$notif['jogador'].' recebeu seu tpoint por clique</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'combo' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle amber small">videogame_asset</span>'.$notif['jogador'].' fez '.$notif['ExtraDetalhes'].' em sua primeira vez</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; } } } ?> como eu faria para ser exibido todos os resultados registrados com o json_encode().
    • By Robson Barros da Rocha
      Bom dia povo. Tenho um problema, e não uma dúvida. Eu executo no SQL Server esta query para agrupar os resultados cujo tenha o código do comprovante repetido:
      SELECT * FROM SHOP_Pedidos WHERE show='1' GROUP BY comprovante As colunas são:
      ID = Se preenche automaticamente
      comprovante = Recebe o código do comprovante
      productName = Nome do produto
      productValue = Valor do produto
      dateSent = Data que o produto foi enviado
      show = Enviado (1) e não enviado (0)
       
      A query que mostrei acima, não retorna dados porque aparece esse erro: "Column 'SHOP_Pedidos.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause." Certo, então aí que está o problema. Vendo o erro, eu troquei a * pela coluna comprovante, e resultou, mas a consulta só retorna a coluna comprovante (por conta do SELECT estar especificando somente ele. 
       
      A dúvida é: Tem como recuperar todos as colunas, assim como mysql?
    • By mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
×

Important Information

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