*Ricardo, talvez você possa trabalhar com lag e lead pra separar os
agrupamentos. Segue um exemplo pra te dar uma idéia:*

with tabela as (
select 1  numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 2  numero, to_date('20140901','YYYYMMDD') data, 15 valor, 'N' flag
from dual union all
select 3  numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 4  numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 5  numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 6  numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'S' flag
from dual union all
select 7  numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'S' flag
from dual union all
select 8  numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 9  numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'S' flag
from dual union all
select 10 numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 11 numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 12 numero, to_date('20140901','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 13 numero, to_date('20140902','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 14 numero, to_date('20140902','YYYYMMDD') data, 10 valor, 'N' flag
from dual union all
select 15 numero, to_date('20140902','YYYYMMDD') data, 10 valor, 'N' flag
from dual
) ,
tabela_2 as (
select to_char(data,'YYYYMMDD') || flag chave,
       lead(to_char(data,'YYYYMMDD') || flag,1) over (order by numero)
chave_2,
       numero,
       data,
       valor,
       flag
from tabela
),
tabela_3 as (
select t.* from tabela_2 t
where chave != chave_2 or chave_2 is null
order by numero
),
tabela_4 as (
select t.numero, min(t.data) data, min(t.valor) valor, min(t.flag) flag,
min(t3.numero) agrupador
from tabela t join tabela_3 t3 on t.data = t3.data and t.flag = t3.flag and
t.numero <= t3.numero
group by t.numero
order by t.numero
)
select data, min(numero) || ' | ' ||  max(numero) intervalo, flag,
sum(valor) total
from tabela_4
group by data, flag, agrupador
order by agrupador


*Entendo que para um volume grande de informações essa pode não ser a
melhor solução, mas pelo menos pode te ajudar a ter alguma idéia.*



Ricardo Hideyuki Tajiri

Em 15 de setembro de 2014 11:24, Ricardo Monteiro
ricardolgmonte...@yahoo.com.br [oracle_br] <oracle_br@yahoogrupos.com.br>
escreveu:

>
>
> Olá Enderson,
>
> Obrigado pelo retorno.
> Realmente não houve resposta.
> É bem parecida com a ideia de quartil, só que não consigo definir quantos
> quartis eu terei. Precisaria fazer alguns testes com valores grandes para
> ver o que acontece. O universo de dados que tenho para trabalhar
> mensalmente são em torno 120 milhões de linhas em média. Por isso a
> necessidade de fazer agrupamento como mencionei no primeiro e-mail.
>
> Abs
> Ricardo
>
>
>   Em Segunda-feira, 15 de Setembro de 2014 11:08, "
> ederson200...@yahoo.com.br [oracle_br]" <oracle_br@yahoogrupos.com.br>
> escreveu:
>
>
>
>  Ricardo,
>
> Vi que ainda não houve uma resposta sob medida para o seu problema.
>
> Pelo que entendi, vc está precisando de uma operação de QUARTIL, entendi
> correto?
>
> Sendo isto, a função é NTILE, veja exemplo:
>
>
> http://www.techhoney.com/oracle/function/ntile-function-in-oracle-sql-plsql/
>
>
> Ederson Elias
> DBA Oracle - http://br.linkedin.com/pub/ederson-elias/24/8b/8b0
> ------------ Labor improbus omnia vincit
>
>
>    
>
  • [oracle_br] He... Ricardo Monteiro ricardolgmonte...@yahoo.com.br [oracle_br]
    • [oracle_b... jlchia...@yahoo.com.br [oracle_br]
      • Re: [... Ricardo Monteiro ricardolgmonte...@yahoo.com.br [oracle_br]
    • [oracle_b... ederson200...@yahoo.com.br [oracle_br]
      • Re: [... Ricardo Monteiro ricardolgmonte...@yahoo.com.br [oracle_br]
        • R... Ricardo Tajiri rhtaj...@gmail.com [oracle_br]

Responder a