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?
Pergunta
fsmariano
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;
}
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.