Jump to content

Recommended Posts

Posted

Boa tarde...

Preciso construir uma instrução SQL que me retorne uma tabela com um somatório de valores para cada vários intervalos de tempo, que serão cada mês do ano.

já vi a instrução MONTH(), mas não tive os resultados esperados...

obrigado.

Posted

Boa tarde,

Explica melhor a tua duvida.

Segundo percebi queres fazer uma instrução SQL que devolva o somatório dos valores de todas as linhas de uma coluna, e com uma clausula where em que queres colocar mês e ano ?

Select campo1, campo2, campovalor, campodata, mes as Month(campodata),  
SUM(campovalor) from tabela where campodata between '2012-01-01' and '2012-12-31' group by mes

Não testei o exemplo em MySQL mas penso que será algo parecido com isto.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted

faz um SUM com um GROUP BY mes.

SELECT SUM(Valor), Mes
 FROM tbl
 GROUP BY Mes

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

Boas...

é assim eu não tenho o campo mes na tabela. Tenho dataFim e dataInicio.

Eu preciso de algo parecido com o primeiro exemplo, mas para cada mês...

Por exemplo Janeiro BETWEEN '2012-01-01' AND '2012-01-31' e assim por adiante!

Certo, o mes vem do comando MONTH()

Vou testar!

Posted

Eu tenho esta instrução:

SELECT sum(presenca) as som,m.sector,MONTH(hora_inicio), hora_inicio ,hora_fim, progresso_mod,nc_associada_mod
FROM (tabela_mod m
  LEFT JOIN tabela_gamas g
	 ON m.ot_mod=g.ot_gamas AND m.sub_ot_mod_1=g.sub_ot_1_gamas AND m.sub_ot_mod_2=g.sub_ot_2_gamas
	 AND m.sub_ot_mod_3=g.sub_ot_3_gamas AND m.sub_ot_mod_4=g.sub_ot_4_gamas
	 AND m.sector=g.sector AND m.operacao_mod=g.operacao)
  LEFT JOIN (
    SELECT codigo_operario,
	    Sum(
		    IFNULL(round(((TIME_TO_Sec(TIMEDIFF(saida_1,entrada_1)))/60)/60,2),0)+IFNULL(round(((TIME_TO_Sec(TIMEDIFF(saida_2,entrada_2)))/60)/60,2),0) 
		    +IFNULL(round(((TIME_TO_Sec(TIMEDIFF(saida_3,entrada_3)))/60)/60,2),0)+IFNULL(round(((TIME_TO_Sec(TIMEDIFF(saida_4,entrada_4)))/60)/60,2),0)
	    ) AS presenca
    FROM tabela_presenca_global
    WHERE (data_entrada BETWEEN '2012-01-01' AND '2012-12-31')
    GROUP BY codigo_operario
    ) p ON  m.codigo_operario=p.codigo_operario
WHERE m.sector='040' AND (nc_associada='' OR (nc_associada=nc_associada_mod))
AND hora_inicio BETWEEN '2012-01-01' AND '2012-12-31'
group by sector, MONTH(hora_inicio)

Mas, usando o month os valores da soma dão errados... se fizer apenas para as datas de inicio e fim de janeiro dá-me 200000 e com o monhth obtenho 1000000 por exemplo...

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
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.