Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luthien

calcular faturamento por periodo

Recommended Posts

Olá,

 

preciso calcular o faturamento de uma empresa por período (manha, tarde e noite). Mas não consigo pensar em uma maneira de colocar todos esses dados em uma mesma tabela. Consigo fazer separado:

select DataEntrada as Data,sum(Recibo.ValorPago) as FaturamentoNoite
from Recibo where (Recibo.HoraSaida between ('18:00:00') and ('23:59:59'))
group by Recibo.DataEntrada;

Queria colocar FaturamentoManha, FaturamentoTarde e FaturamentoNoite na mesma tabela mas não sei como!

 

Agradeceria se alguém puder me ajudar :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode utilizar CASE e agrupar por este campo. Exemplo:

SELECT
  CASE(
    WHEN TIME(data_hora) BETWEEN '06:00:00' AND '11:59:59' THEN 'Manha'
    WHEN TIME(data_hora) BETWEEN '12:00:00' AND '17:59:59' THEN 'Manha'
    WHEN TIME(data_hora) BETWEEN '18:00:00' AND '23:59:59' THEN 'Manha'
    ELSE Madrugada
  )END as Turno,
  COUNT(id) as Quantidade
FROM tabela
WHERE DATE(data_hora) = '2016-02-24'
GROUP BY Turno

Compartilhar este post


Link para o post
Compartilhar em outros sites
select case
    when time(Recibo.HoraSaida) between '06:00:00' and '11:59:59' then 'Manha'
    when time(Recibo.HoraSaida) between '12:00:00' and '17:59:59' then 'Tarde'
    when time(Recibo.HoraSaida) between '18:00:00' and '23:59:59' then 'Noite'
    else 'Madrugada' end  as Turno, sum(Recibo.ValorPago) as Faturamento
    from Recibo group by Turno;

Deu certinho! Obrigada :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Noobweb
      Boa noite a todos!
      Desde já peço desculpas caso esteja postando no lugar errado.
      Bom, eu sei que aqui não é o Fórum "faz pra mim", mas estou precisando muito de ajuda para finalizar meu TCC (php e mysql não são minha area)
       
      Tenho uma tabela no BD que guarda os valores de tensão, corrente, potência e data e hora.
      Preciso fazer a soma das horas entre determinado período de tempo (15 dias por exemplo) e após isso fazer a média dos valores de outra coluna neste período.
       
      Para isso, peguei um código na internet (perdi a referência)  que estou tentando fazer um "range" no período.
       
      filter.php
      <?php //filter.php if(isset($_POST["from_date"], $_POST["to_date"])) { $connect = mysql_connect('localhost', 'usuário', 'senha'); @mysql_select_db('tabela') or die( "Unable to select database"); $output = ''; $query = " SELECT * FROM medidas WHERE horario BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."' "; $result = mysql_query($query); $row = mysql_fetch_array($result); $output .= ' <table class="table table-bordered"> <tr align="center"> <th width="25%">Data</th> <th width="25%">Corrente</th> <th width="25%">Tensão</th> <th width="25%">Potência</th> </tr> '; if(mysql_num_rows($result) > 0) { while($row = mysql_fetch_array($result)) { $output .= ' <tr align="right"> <td><?php echo $row["horario"]; ?></td> <td><?php echo $row["corrente"]; ?></td> <td><?php echo $row["tensao"]; ?></td> <td><?php echo $row["potencia"]; ?></td> </tr> '; } } else { $output .= ' <tr> <td colspan="5">No Order Found</td> </tr> '; } $output .= '</table>'; echo $output; } ?> e index.php
      <?php $connect = mysql_connect('localhost', 'usuário', 'senha'); @mysql_select_db('tebela') or die( "Unable to select database"); $query = "SELECT * FROM medidas ORDER BY horario ASC"; $result = mysql_query($query); $row = mysql_fetch_array($result) ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <head> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> </head> <body> <br /><br /> <div class="container" style="width:900px;"> <h2 align="center">Teste</h2> <h3 align="center">Horario</h3><br /> <div class="col-md-3"> <input type="text" name="from_date" id="from_date" class="form-control" placeholder="De" /> </div> <div class="col-md-3"> <input type="text" name="to_date" id="to_date" class="form-control" placeholder="Até" /> </div> <div class="col-md-5"> <input type="button" name="filter" id="filter" value="Filtrar" class="btn btn-info" /> </div> <div style="clear:both"></div> <br /> <div id="order_table"> <table class="table table-bordered"> <tr> <th width="25%">Data</th> <th width="25%">Corrente</th> <th width="25%">Tensão</th> <th width="25%">Potência</th> </tr> <?php while($row = mysql_fetch_array($result)) { ?> <tr align="right"> <td><?php echo $row["horario"]; ?></td> <td><?php echo $row["corrente"]; ?></td> <td><?php echo $row["tensao"]; ?></td> <td><?php echo $row["potencia"]; ?></td> </tr> <?php } ?> </table> </div> </div> </body> </html> <script> $(document).ready(function(){ $.datepicker.setDefaults({ dateFormat: 'yy-mm-dd' }); $(function(){ $("#from_date").datepicker(); $("#to_date").datepicker(); }); $('#filter').click(function(){ var from_date = $('#from_date').val(); var to_date = $('#to_date').val(); if(from_date != '' && to_date != '') { $.ajax({ url:"filter.php", method:"POST", data:{from_date:from_date, to_date:to_date}, success:function(data) { $('#order_table').html(data); } }); } else { alert("Please Select Date"); } }); }); </script> Resumindo...
      Nestes arquivos, quando aplico o flitro de data, não aparece absolutamente nada.
      Não sei como somar a quantidade de horas (pode ser minutos, melhor ainda) em um período.
      E ainda por cima preciso fazer uma média de valores em outra coluna, mas no periodo escolhido.
       
       
       
    • Por hwrry
      Bom dia! Preciso realizar um calculo que me retorne a quantidade de horas que uma maquina ficou parada, em meu banco de dados tenho dois campo data/minutos, que são de data parada e data retorno, os mesmos estão no seguinte formato:

       
      $dataIni = '201704120850' ; $dataFim = '201704120955';  
      Até ai consigo fazer o cálculo com a seguinte função:       
      $dtIni = '201704120850'; $dtFim = '201704120955'; $datatime1 = new DateTime($dtIni); $datatime2 = new DateTime($dtFim); $data1 = $datatime1->format('Y-m-d H:i:s'); $data2 = $datatime2->format('Y-m-d H:i:s'); $data1 = strtotime($data1); $data2 = strtotime($data2); $nHoras = ($data2 - $data1) / 3600; $nMinutos = (($data2 - $data1) % 3600) / 60; $total = sprintf('%02d:%02d', $nHoras , $nMinutos); echo $total;  
      O problema agora é que preciso levar em consideração apenas o horário de funcionamento das maquinas que seria das 07:30 até 12:00 e das 13:30 as 17:48, e desconsiderar os sábados, domingos e feriados.
    • Por hwrry
      Bom dia! Preciso realizar um calculo que me retorne a quantidade de horas que uma maquina ficou parada, em meu banco de dados tenho dois campo data/minutos, que são de data parada e data retorno, os mesmos estão no seguinte formato:
       
       $dataIni = '201704120850' ;
       $dataFim = '201704120955';
       
      Até ai consigo fazer o cálculo com a seguinte função:
      $dtIni = '201704120850';
              $dtFim = '201704140851';  
              
              $datatime1 = new DateTime($dtIni);
              $datatime2 = new DateTime($dtFim);
              
              //echo '<pre>'; print_r($datatime1); die;
              $data1  = $datatime1->format('Y-m-d H:i:s');
              $data2  = $datatime2->format('Y-m-d H:i:s');  
              
              //echo '<pre>'; print_r($data1); die;
              
              $data1 = strtotime($data1);
              $data2 = strtotime($data2);
              
              $nHoras   = ($data2 - $data1) / 3600;
              $nMinutos = (($data2 - $data1) % 3600) / 60;
              $total = sprintf('%02d:%02d', $nHoras , $nMinutos);
    • Por Lucas S. Rosa
      Olá pessoal tudo bem?
       
      É o seguinte estou tentando fazer um script em SQL no Oracle que retorna o "código, nome, valor total vendido" do produto mais vendido em um determinado período.
      Fiz o script, mas ele tá retornando como resultado todos os produtos vendido no período, e o que eu gostaria era que ele apenas me retorna o produto mais vendido. Eu coloquei a função agregada MAX(...), mas mesmo assim é retornado todos os produtos vendido no período, segue meu script.(OBS: ele tá funcionando, o problema é que não está retornando apenas o produto mais vendido, mas todos os produtos vendidos).
       
      SELECT SUB.SUB_CODIGO, SUB.SUB_NOME, MAX(TESTE.TOTAL) FROM SUBSTANCIA SUB INNER JOIN (SELECT ITENS.SUB_CODIGO, SUM(ITENS.ITEM_NOT_SAI_QTDE * ITENS.ITEM_NOT_SAI_PRECO) AS TOTAL FROM ITENS_NOTA_SAIDA ITENS INNER JOIN NOTA_SAIDA NOTA ON NOTA.NOT_SAI_CODIGO = ITENS.NOT_SAI_CODIGO WHERE NOT_SAI_DATA BETWEEN '17/03/2017' AND '17/03/2017' GROUP BY ITENS.SUB_CODIGO ) TESTE ON (SUB.SUB_CODIGO = TESTE.SUB_CODIGO) GROUP BY SUB.SUB_CODIGO, SUB.SUB_NOME; Em anexo tá o resultado que esta retornando pra vocês terem uma ideia do que eu to falando.
      Se alguém poder me ajudar eu agradeço.
      resultado_sql.pdf
    • Por eronventer
      Olá pessoal.
       
      Estou com um problema que não estou conseguindo resolver, preciso listar todos os colaboradores que fazem aniversário num período de 30 dias a partir da data vigente, porém minha query não retorna nada e não sei onde estou errando... Agora se eu alterar o intervalo para "30 DAY" ele lista mas somente os do mês, mas como hoje é 1/12 ele deveria me listar até 1/1.
      SELECT id, nome, data_nascimento FROM colaboradores WHERE DAYOFYEAR(data_nascimento) BETWEEN DAYOFYEAR(CURDATE()) AND DAYOFYEAR(ADDDATE(CURDATE(), INTERVAL 1 MONTH))
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.