terça-feira, 6 de julho de 2010

Funções Agregadas em janelas no SQL Server

Depois dos posts do Miguel procurei no SQL Server um recurso similar ao explicado por ele das janelas para funções agregadas. No SQL Server existe o OVER, entretanto com opções mais limitadas, não existindo a cláusula RANGE.
Para conseguir o mesmo resultado tive que utilizar sub-queries, o que tira toda a facilidade da operação. Para exemplificar o terceiro exemplo do Oracle apresentado pelo Miguel que tinha o seguinte SQL (http://sqlbrasil.blogspot.com/2010/07/funcoes-agregadas-em-janelas-no-oracle.html):

Select as_of_date, pais, num_users,
     sum(num_users) over(partition by pais
     order by as_of_date
     range extract(day from as_of_date)-1 preceding ) acum_mes
from tst_janela3
order by 1,2;
 
tive que resolver da seguinte maneira no SQL Server:
 
Select as_of_Date, pais, num_users,
      (Select sum(num_users)
         from tst_Janela3 b
       where b.as_of_date >= a.as_of_date - DAY(a.as_of_date) + 1
          and b.as_of_date <= a.as_of_date
          and a.pais = b.pais) as acum_mes
from tst_janela3 a
order by 1, 2;

Nenhum comentário:

Postar um comentário