none
Cálculo com variáveis de duas tabela diferentes. Agrupando por data RRS feed

  • Pergunta

  • Preciso efetuar um cálculo com dados de duas tabelas distintas, quando é um calculo com um resultado eu consigo normalmente fazendo dessa forma: 

    select
    	(select sum(valorX) as total X from tabelaX where DAY(Data_HoraX) = DAY(GETDATE()) and MONTH(Data_HoraX) = MONTH(GETDATE()) and YEAR(Data_HoraX) = YEAR(GETDATE()))
    	*
    	(select sum(valorY) as total Y from tabelaY where DAY(Data_HoraY) = DAY(GETDATE()) and MONTH(Data_HoraY) = MONTH(GETDATE()) and YEAR(Data_HoraY) = YEAR(GETDATE()))
    as resultado

    dessa forma eu consigo o resultado desejado pois o calculo é baseado somente na data corrente. 

    Meu problema é que agora eu preciso desse resultado diariamente, só estou com dificuldade para agrupar esse calculo por data. Lembrando que nas duas tabelas meu campo data é um datetime. Imagino ter que usar um CAST(Data_Hora as date) para agrupar os dados mas não enchergo onde. 

    Fico agradecido se alguém puder ajudar e caso haja alguma duvida na minha pergunta é só falar.


    quinta-feira, 26 de julho de 2018 17:15

Respostas

Todas as Respostas

  • Deleted
    quinta-feira, 26 de julho de 2018 17:59
  • Perfeito José Diz, funcionou como o esperado, porém de certa forma eu preciso complicar um pouco mais. Preciso adicionar o calculo de uma terceira tabela. Utilizando o modelo como me passastes fiz dessa forma: 

    with
    -- soma valores diários no período da tabelaX
    somaX as (
    SELECT cast(Data_Hora as date) as Dia,
           sum(Potência)/12 as energia 
      from [GreenYellow_Jaiba].[dbo].[Qgbt_ABB]  
      group by cast(Data_Hora as date)
    ),
    -- soma valores diários no período da tabelaY
    somaY as (
    SELECT cast(Data_Hora as date) as Dia,
           (sum([Irradiancia])/30)/1000 as irradiacao 
      from [GreenYellow_Jaiba].[dbo].[Piranometro] 
      where Equipamento = 2
      group by cast(Data_Hora as date)
    ),
    -- soma valores diários no período da tabelaZ
    somaZ as (
    SELECT cast(Data_Hora as date) as Dia,
           avg(Temperatura_placa) as temp 
      from [GreenYellow_Jaiba].[dbo].[SensorTemperatura_PT100] 
      where Equipament = 1
      group by cast(Data_Hora as date)
    )
    
    
    SELECT coalesce(X.Dia, Y.Dia, Z.Dia) as Dia,
           coalesce(X.energia, 0) * coalesce(Y.irradiacao, 0) / coalesce(Z.temp, 0) as resultado
      from somaX as X
           full outer join somaY as Y 
    	   full outer join somaZ as Z
    	   on Y.Dia = X.Dia and  
    	   on Y.Dia = Z.Dia and
    	   on X.Dia = Z.Dia
    	   order by Dia;

    Porém estou com problema na comparação das datas, talvez seja erro de código mesmo mas não enxergo onde, estou ingressando nesse mundo sql agora e ainda estou aprendendo muita coisa, se puderes me ajudar mais uma vez, fico agradecido.

    Att.


    quinta-feira, 26 de julho de 2018 22:16
  • Deleted
    quinta-feira, 26 de julho de 2018 23:16
  • Boa tarde,

    Por falta de retorno essa thread está sendo encerrada.

    Se necessário favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 3 de agosto de 2018 19:45
    Moderador