Jump to content
Thiago Btos

Select com coluna do período acumulado

Recommended Posts

Bom dia pessoal.

 

Estou com uma dúvida na estruturação do select.

Tenho um relatório que está extraindo já informações corretamente, com base no período gerado (inicial e final)

Exemplo de como está hoje:

SELECT D.CATEGORIA, SUM(D.VALOR) AS VALOR_VENDA, D.DATA AS (MES_ANO)
FROM DUAL D
WHERE D.DATA BETWEEN '20210501' AND '20210731'
GROUP BY D.CATEGORIA, D.DATA

Retornando:

Categoria | Valor_venda     | Mes_Ano

1                |     1000,00         | 05/2021

1                |     2000,00         | 06/2021

1                |       800,00         | 07/2021

2                |      500,00          | 05/2021

2                |      200,00          | 07/2021

2                |      700,00          | 06/2021

 

Até ai está tranquilo.

Porém foi solicitado para adicionar uma coluna YTD (Year to data - acumulado do ano) agrupando o valor total da venda do ano do filtro.

Então se foi colocado uma data do período Jan/2020 a Mar/2020, essa nova coluna tem que pegar as vendas do ano inteiro de 2020

 

E precisa me retornar assim:

 

Categoria | Valor_venda     | Mes_Ano  |  YTD

1                |     1000,00         | 05/2021   |  15000,00

1                |     2000,00         | 06/2021   |  15000,00

1                |       800,00         | 07/2021   |  15000,00

2                |      500,00          | 05/2021   |  8000,00

2                |      200,00          | 07/2021   |  8000,00

2                |      700,00          | 06/2021   |  8000,00

 

(Os valores de 15000 e 8000 seria a soma do ano inteiro)

 

O que consegui pensar seria um subselect que tem o where com data do ano, porém nesse caso retorno mais de um resultado no subselect, não dando para usar...

 

Qual seria a alternativa que tenho?

 

Share this post


Link to post
Share on other sites

Motta bom dia.

 

Eu tentei usar o over, se fosse para o mesmo periodo do filtro que está no where, daria certo.

Mas preciso ter um outro periodo (ano) nessa coluna YTD, é onde está o meu problema

Share this post


Link to post
Share on other sites

Acrescenta uma coluna ano , ou tenta fazer o OVER por to_char(data,'yyyy') , creio que funciona

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 gamesmax2
      Boa noite,
      Pessoal estou com uma dificuldade no MYSQL, estou querendo obter dados de um cadastro caso ele tenha preenchido todos os Campos, tentei usar o Group by mas não tive sucesso.
       
      Minha tabela e a seguinte:
       
      Nome.              Pedido.            Status
      Daniel.              9955.                 Ok
      Daniel.              9954                  Ok
      Rafael.              9940                  Ok
      Rafael.              9941.                 Aberto
      Rafael.              9942.                 Ok
      Rodrigo.            9961.                 Ok
      Rodrigo.            9962.                 Ok
       
       
      Meu objetivo e puxar os nomes que estão com todos o pedidos relacionado em ok, no caso o Rafael não pode aparece pois ele tem um pedido Aberto, porém não conseguir fazer isso, pessoal peco a ajuda de VCS muito o obrigado.
       
      tentei isso aqui: SELECT nome, pedido, status FROM `cadastros` GROUP BY pedido, nome having status = 'Ok'
    • By gamesmax2
      Boa tarde,
      Pessoal estou com uma dificuldade no MYSQL, estou querendo obter dados de um cadastro caso ele tenha preenchido todos os Campos, tentei usar o Group by mas não tive sucesso.
       
      Minha tabela e a seguinte:
       
      Nome.              Pedido.            Status
      Daniel.              9955.                 Ok
      Daniel.              9954                  Ok
      Rafael.              9940                  Ok
      Rafael.              9941.                 Aberto
      Rafael.              9942.                 Ok
      Rodrigo.            9961.                 Ok
      Rodrigo.            9962.                 Ok
       
       
      Meu objetivo e puxar os nomes que estão com todos o pedidos relacionado em ok, no caso o Rafael não pode aparece pois ele tem um pedido Aberto, porém não conseguir fazer isso, pessoal peco a ajuda de VCS muito o obrigado.
       
      tentei isso aqui: SELECT nome, pedido, status FROM `cadastros` GROUP BY pedido, nome ORDER BY having status = 'Ok'  
       
    • By henriquers
      Boa Tarde, a todos
       
      Estou fazendo um relatório que traz em uma pagina web um relatório para ser impresso, mas estou tendo um problema de desempenho para trazer os dados para a pagina web.
      Tenho uma consulta onde traz todos os ID dos funcionários e salvo cada um deste resultado em um Array. E com esses IDs salvo em um array eu faço um loop e dentro faço um select filtrando cada ID de funcionário onde neste select traz as informações de cada um dos funcionário, mas estou com problema nesse select dentro do loop, pois demora quase 2 min para finalizar todas as consultas e trazer as informações na pagina são mais de 130 consulta que faz.
      Pensei em alguns modos de salvar os os todos dados em array com a penas um select mas não consigo filtra por ID.
      $selRE = "SELECT * FROM(SELECT DISTINCT RE, NOME FROM ENG_REL_EPIS WHERE to_date(DATA,'DD/MM/YY') BETWEEN to_date('$dataIni','DD-MM-YY') AND to_date('$dataFim','DD-MM-YY') ) ORDER BY NOME ASC "; $parse2 = oci_parse($conn,$selRE); oci_execute($parse2); while($fetch2=oci_fetch_assoc($parse2)) { $re2[] = $fetch2['RE']; } $cnt = count($re2); $i = 0; while($i < $cnt ){ $select = "SELECT DISTINCT CA,PRODUTO,DESCRICAO,DATA,RE,NOME,QTD FROM ENG_REL_EPIS WHERE to_date(DATA,'DD/MM/YY') BETWEEN to_date('$dataIni','DD-MM-YY') AND to_date('$dataFim','DD-MM-YY') AND RE ='$re2[$i]' ORDER BY DATA ASC"; // echo $select."<br>"; $parse=oci_parse($conn,$select); oci_execute($parse); $fetch=oci_fetch_array($parse); echo " <div class='tamanho'> <br> <!-- ============== BEGIN CABEÇALHO ==================--> <div class='row borda'> <div class='col-sm-4'> <img src='./../../img/logo_p.png' alt='some text' class='logo'> </div> <div class='col-sm borda_esquerda titulo2'> Ficha de Registro de Entrega de Equipamentos de Proteção Individual </div> </div> <br> <div class='row borda titulo'> <div class='col'> PERÍODO: $dataIni a $dataFim </div> </div> <br> <div class='row borda_esquerda_direita_top titulo'> <div class='col'> PRODUTOS </div> </div> <div class='row titulo'> <div class='col-2 borda_top_esquerda'> Data </div> <div class='col-2 borda_top_esquerda'> Código </div> <div class='col-1 borda_top_esquerda'> Qtd </div> <div class='col-1 borda_top_esquerda'> CA </div> <div class='col borda_esquerda_direita_top'> Descrição </div> </div> "; do{ $DATA = date('d/m/Y', strtotime($fetch["DATA"])); $PRODUTO = $fetch["PRODUTO"]; $QTD = $fetch["QTD"]; $CA = $fetch["CA"]; $DESCRICAO = mb_strimwidth($fetch["DESCRICAO"], 0, 48, "..."); $RE = $fetch["RE"]; $NOME = $fetch["NOME"]; echo " <div class='row conteudo'> <div class='col-2 borda_top_esquerda'> $DATA </div> <div class='col-2 borda_top_esquerda'> $PRODUTO </div> <div class='col-1 borda_top_esquerda'> $QTD </div> <div class='col-1 borda_top_esquerda'> $CA </div> <div class='col borda_esquerda_direita_top'> $DESCRICAO </div> </div> "; }while($fetch=oci_fetch_array($parse)); echo " <div class='row borda_top'> &nbsp; </div> <div class='row borda_esquerda_direita_top'> <div class='texto'> Eu $NOME, R.E. $RE. De acordo com as normas regulamentadoras (N.R.) 1.7 e 6.1, declaro e confirmo que recebi da Engemet Metalurgia e Comercio Ltda os Equipamentos de Proteção Individual necessários à minha função, discriminados e assinados por mim, abaixo. Afirmo ainda ter ciência da obrigatoriedade do bom uso e conservação destes, bem como a instrução devida para o uso correto. </div> <br> </div> <div class='row '> <div class='col borda_esquerda_direita_baixo'> <div class='titulo'> $data <br> <br> </div> </div> </div> <div class='row'> <div class='col'> <div class='titulo'> <br><br><br> Assinatura:_____________________________________________________________ </div> </div> </div> </div> <p style='page-break-before:always'></p> "; $i++; oci_free_statement($parse); }  
×

Important Information

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