Ir para conteúdo
Fórum Script Brasil
  • 0

Como Fazer uma Consulta que procure e some onde o Nome e o Ano se alteram?


fsmariano

Pergunta

Olá amigos, Bom dia, Boa tarde e Boa Noite, queridos Deuses do MYSQL ou SQL, aqui quem fala é apenas um reles mortal iniciante nessa linguagem então desculpa a pergunta se parece simples, bom tenho o seguinte problema.

Tenho uma tabela com nome TbAcoes, que possui os seguintes Campos: Id, Nome, Volume,Valor, Data;

na tabela tenho que fazer a seguinte pesquisa, consultar e somar o valor, de um terminado período de tempo com determinado nome, tá o problema e que o nome muda e o período que é por trimestre também junto com o ano, ai eu fiz assim o comando:

select  Nome,  Sum(Valor) as Total Where Nome="AAAAA" and Data Between "2013-01-01" and "2013-03-01";

até aqui beleza né? A query exibe, só que eu tenho que consultar no intervalo (2013-04-01 ate 2013-06-01), depois (2013-07-01 até 2013-09-01), depois (2013-10-01 até 2013-12-01), após isso mudar o Ano para 2014,2015,2016 e 2017.

Após isso na consulta Mudar no Nome para "AAAAB" e somar o valor, no intervalo trimestral e nos anos;  ta se fosse um nome só faria assim algumas vezes,

select  Nome,  Sum(Valor) as Total Where Nome="AAAAA" and Data Between "2013-01-01" and "2013-03-01";

select  Nome,  Sum(Valor) as Total Where Nome="AAAAA" and Data Between "2013-04-01" and "2013-06-01";

select  Nome,  Sum(Valor) as Total Where Nome="AAAAA" and Data Between "2013-07-01" and "2013-09-01";

select  Nome,  Sum(Valor) as Total Where Nome="AAAAA" and Data Between "2013-10-01" and "2013-12-01";

mudando o ano daria de Boa, só que tem 450 nomes KKKKK me lasquei;

Bom meus amigos como sou novo nesse trem de T-SQL com certeza tem algum jeito de fazer essa consulta, dai tive a seguinte ideia usando a ajuda do php:

olha só Criei uma nova Tabela com o nome tbNomeAcoes com os campos ID e Nome só mais nada;

No php usei os laços de repetição FOR fazendo assim só to colocando as ideias depois abaixo posto o código para vocês me xingarem mais calma porque to começando, lembrando não é duvida sobre o php,

a ideia é pegar e usar três loops assim, no primeiro loop eu consulto nome através do id, como o for esta girando dentro dele eu coloquei um select onde id igual ao contador do for, logo ele trás os nomes, dai criei mais dois loops dentro do primeiro pra mudar o intervalo do trimestre e o ano e Outro Select para somar os valores; segue o código logo abaixo:

=========================================================================================================================================================

Agora a pergunta para vocês nobres amigos tem como fazer essa consulta direto no Mysql, sql sem usar os loops do php,  seria muito melhor eu acho que deve ter mais não sei fazer esse tipo de consulta, se sim poderiam postar como seria esse SELECT?   

=========================================================================================================================================================

==========

PHP  so pra usar o loop, não sei se pode kkkk mais a ideia é boa, mais deu pau kkkk

=========

$Ano = array("2013", "2014", "2015", "2016", "2017");

$soma = 0;

try {
$pdo = new PDO( 'mysql:host=localhost;dbname=db_tonto', 'root' ,'');
$pdo->setAttribute( PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION );


for ($i = 1; $i <= 450; $i++)
{
$stm1 = $pdo->prepare( 'SELECT Nome FROM `tbNomeAcoes` WHERE `Id` = :cod;' );
$stm1->bindParam( ':cod' , $i , PDO::PARAM_STR );

if ( $stm1->execute() )
{
    foreach ( $stm1->fetchAll( PDO::FETCH_OBJ ) as $nada )
        {
    $nome = $nada->Nome;

        if($nome!="")
        {

        for ($j = 0; $j <= 4; $j++)
        {
         
            for ($k = 1; $k <= 4; $k++ )
            {
                     if ($k==1){$p1 = $Ano[$j]."-01-01"; $p2 = $Ano[$j]."-03-01";}
                else if ($k==2){$p1 = $Ano[$j]."-04-01"; $p2 = $Ano[$j]."-06-01";}
                else if ($k==3){$p1 = $Ano[$j]."-07-01"; $p2 = $Ano[$j]."-09-01";}
                else if ($k==4){$p1 = $Ano[$j]."-10-01"; $p2 = $Ano[$j]."-12-01";}
            
            $stm2 = $pdo->prepare( 'SELECT * FROM `tbAcoes` WHERE `Nome` = :nome AND `Data` BETWEEN :p1 And :p2;' );
            $stm2->bindParam( ':nome' , $nome , PDO::PARAM_STR );
            $stm2->bindParam( ':p1' , $p1 , PDO::PARAM_STR );
            $stm2->bindParam( ':p2' , $p2 , PDO::PARAM_STR );
    
                    if ( $stm2->execute() ) 
                    {
                        foreach ( $stm2->fetchAll( PDO::FETCH_OBJ ) as $acao ) 
                        {
                        
                        $volume = $acao->Volume;
                        
                        $soma = floatval($volume) + $soma;
                        
                        } 

                    }
            }

        }    

        }

    }

}

}
catch ( PDOException $e ) {
var_dump( $e->getMessage() );
echo 'Esse "echo" só é disparado caso uma exceção tenha sido disparada.' , PHP_EOL;
}

 

 

 

 

 

 

 

 

  

 

Editado por fsmariano
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...