Como agregar valores à soma conforme evolução de um campo data
-
quarta-feira, 25 de abril de 2012 21:14
Olá!
Estou quebrando a cabeça tentando montar uma query, gostaria de ver se alguém já teve o mesmo problema.
Tenho uma consulta que retorna a quantidade de ocorrências de um certo evento por data. Ou seja, em 01/02/2012 tive 10 ocorrências, no dia 02/02/2012 tive 12 ocorrências, etc. Preciso que uma query me retorne a soma das ocorrências desde a primeira data que aparece.
ex.:
data | ocorrencia na data | soma de ocorrencias
01/02 | 10 | 10
02/02 | 12 | 22
03/02 | 1 | 23
04/02 | 5 | 28
Minha query tem que retornar os valores conforme demonstrado na terceira coluna.
Alguma ideia? Muito obrigado.
- Tipo Alterado Gustavo Maia AguiarMVP, Moderator quarta-feira, 25 de abril de 2012 21:33 É uma dúvida e não uma discussão
Todas as Respostas
-
quarta-feira, 25 de abril de 2012 21:41Moderador
Boa Tarde,
Felizmente muitos já passaram, pesquisaram, desenvolveram e encontraram soluções para o seu problema. Eis algumas a gosto do freguês.
declare @t table (data date, ocorrencia tinyint)
insert into @t values ('20120201',10)
insert into @t values ('20120202',12)
insert into @t values ('20120203',01)
insert into @t values ('20120204',05)select data, ocorrencia,
(select sum(ocorrencia) from @t as tint
where tout.data >= tint.data) as soma
from @t as Tout
order by Tout.dataselect tout.data, tout.ocorrencia, SUM(tint.ocorrencia)
from @t as Tout
inner join @t as TInt on Tout.data >= TInt.data
group by Tout.data, Tout.ocorrencia
order by Tout.dataselect data, ocorrencia, soma
from @t as Tout
cross apply (
select SUM(ocorrencia) as soma from @t
where Tout.data >= data) As TInt
order by Tout.data-- Somente no SQL Server 2012
select data, ocorrencia, SUM(ocorrencia) over (order by data) as soma
from @t[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Marcado como Resposta FelipeGDReis quarta-feira, 25 de abril de 2012 22:14
-
quarta-feira, 25 de abril de 2012 22:15
Gustavo,
muito obrigado! Sabia que existia alguma formulinha para resolver esse desafio, por isso mesmo postei no fórum :)
Usei a opção número 1 e resolvi meu problema.
Abs.
Felipe

