Como agregar valores à soma conforme evolução de um campo data

Respondido 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.

Todas as Respostas

  • quarta-feira, 25 de abril de 2012 21:41
    Moderador
     
     Respondido

    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.data

    select 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.data

    select 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/gmasql


    Classifique 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