Esse conceito de "último do grupo anterior" tá meio confuso pra mim ainda, mas 
pelo que entendi vc quer ter dois grupos : primeiro quer agrupar em grupos de 
15 minutos (é o exemplo do link), e depois dentro  resultset vc quer encontrar 
o máximo valor dentro de cada grupo, aí seria o  SELECT anterior dentro de 
outro, agrupando com GREATEST .... O que talvez invalide esse approach é quando 
vc diz que se não tiver registros pra agrupar dentro do intervalo de 15 minutos 
aí vc quer o registro mais próximo, não há uma função NEAREST similar á 
GREATEST - porém, no manual das Analíticas (ie, o "Oracle® Database Data 
Warehousing Guide" ele diz , sobre o WINDOW (para obter sliding windows de 
dados) que se leva em conta se os dados estão próximos da borda da janela, isso 
pode ser que te atenda ...

Dá uma pensada em cima, se não sair nada mesmo mostra pra gente até onde vc 
chegou, que num tempinho livre podemos palpitar mais em cima ...

 []s
 
   Chiappa
   

--- Em oracle_br@yahoogrupos.com.br, Milton Bastos Henriquis Junior 
<milton.bastos@...> escreveu
>
> Chiappa, obrigado pela ajuda...
> 
> O problema é não basta eu guardar apenas o registro anterior na memória - que 
> é o que as funções analíticas fazem.
> 
> No exemplo aí do link, o cara "muda de grupo" quando o intervalo entre um 
> registro e outro é maior que 3 segundos... no meu caso é bem diferente, 
> preciso mudar de grupo quando o próximo registro for o maior dentro de um 
> intervalo de tempo, comparando com o ultimo registro do grupo anterior (e não 
> com o registro imediatamente anterior).
> 
> 
> --
> Milton Bastos
> http://miltonbastos.com
> 
> De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em 
> nome de José Laurindo
> Enviada em: quinta-feira, 17 de novembro de 2011 11:15
> Para: oracle_br@yahoogrupos.com.br
> Assunto: [oracle_br] Re: SELECT chato!
> 
> 
> 
> Colega, quando se fala em agrupamento não-fixo, dependente de comparações 
> entre registros, E ainda com total cumulativo, quase que Obrigatoriamente se 
> fala em funções analíticas : essas danadas são mais flexíveis que uma cobra 
> de borracha , e mais úteis que qualquer cinto de utilidades de herói dos 
> quadrinhos.....
> No caso, eu recomendo o mesmo approach de 
> http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:13946369553642#14274333173515
>  , ie : o valor do registro anterior é mantido em memória (essa é uma 
> funcionalidade básica das funções analíticas), e vc o compara com o registro 
> atualmente lido, se estiver no intervalo vc agrupa/totaliza, se não estiver 
> vc inicia um novo grupo... No caso-exemplo do link a pessoa queria agrupar a 
> cada 3 segundos, o conceito é o mesmo pra vc agrupar a cada 15 minutos.
> 
> []s
> 
> Chiappa
> 
> 
> --- Em oracle_br@yahoogrupos.com.br<mailto:oracle_br%40yahoogrupos.com.br>, 
> Milton Bastos Henriquis Junior <milton.bastos@> escreveu
> >
> > Bom dia pessoal!
> >
> > Ambiente:
> > Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit 
> > Production (Exadata)
> >
> > Estou enferrujado em SQL e preciso fazer um Select que está me 
> > assombrando... se alguém conseguir me ajudar, ficarei muito agradecido!
> > Lá vai:
> >
> > Tenho uma tabela, e fiz a seguinte query:
> >
> > select a, to_char(datahora, 'yyyy/mm/dd HH24:MI') b, c
> > from tabela
> > where a = 392597
> > order by 2;
> >
> > A B C
> > 392597 2011/11/10 07:43 4847277
> > 392597 2011/11/10 07:45 4847316
> > 392597 2011/11/10 07:47 4847357
> > 392597 2011/11/10 07:49 4847404
> > 392597 2011/11/10 07:52 4847471
> > 392597 2011/11/10 07:53 4847500
> > 392597 2011/11/10 07:55 4847547
> > 392597 2011/11/10 07:57 4847595
> > 392597 2011/11/10 07:59 4847631
> > 392597 2011/11/10 08:01 4847664
> > 392597 2011/11/10 08:04 4847715
> > 392597 2011/11/10 08:05 4847732
> > 392597 2011/11/10 08:08 4847777
> > 392597 2011/11/10 08:09 4847800
> > 392597 2011/11/10 08:11 4847851
> > 392597 2011/11/10 08:13 4847901
> > 392597 2011/11/10 08:15 4847952
> > 392597 2011/11/10 08:17 4848002
> > 392597 2011/11/10 08:19 4848049
> > 392597 2011/11/10 08:21 4848100
> >
> > Isolei esta amostra de dados pra facilitar a explicação.
> >
> > A query que preciso montar será para gerar um relatório, que terá como 
> > parâmetro de entrada a coluna A - por isso fixei um valor na cláusula WHERE.
> > Reparem que há um registro a cada 2 minutos (considerando a coluna B), e 
> > caso seja gerado um relatório com o período de 3 dias, por exemplo, o 
> > relatório ficaria muito extenso.
> > A idéia é diminuir a quantidade de registros - reparem que a coluna C é um 
> > valor cumulativo (na real o campo C é um odômetro de um veículo, ou seja, 
> > kilometragem total de um veículo).
> > Portanto, para este relatório, não é necessário ter TODOS os registros. A 
> > idéia é filtrar e trazer registros a cada 15 minutos, usando a seguinte 
> > regra:
> >
> > - O primeiro registro é de 07:43 (conforme exemplo acima).
> > - O próximo registro do relatório deve ser o registro anterior acrescido de 
> > 15 minutos, porém NÃO deve ultrapassar 15 minutos.
> > 07:43 + 00:15 = 07:58.
> > Portanto o segundo registro a ser mostrado seria o das 07:57.
> > O terceiro: 07:57 + 00:15 = 08:12, portanto seria o registro das 8:11.
> >
> > Neste exemplo coincidiu do segundo e terceiro registros serem igual ao 
> > anterior + 14 minutos, mas foi coincidência, pode ser que não exista um 
> > registro com 14 minutos a mais que o anterior (daí quero pegar com 13... ou 
> > com 12... e assim por diante).
> >
> > Caso não exista um registro dentro dos próximos 15 minutos, ou seja, com 
> > intervalo MENOR que 15 minutos, daí tem que vir o próximo registro com 
> > tempo mais próximo (+00:16... +00:17... e assim por diante).
> >
> > É possível fazer isto apenas com uma query? Ou precisaria de uma procedure?
> >
> > Em tempo: preciso das 3 colunas no relatório, além de algumas outras que 
> > são irrelevantes pra montagem da query. A princípio o importante é trazer 
> > apenas os registros dentro dessa regra, com a coluna C correspondente 
> > corretamente.
> >
> > Um chopp pra quem conseguir resolver!
> >
> > Att,
> > --
> > Milton Bastos
> > http://miltonbastos.com
> >
> >
> >
> > This message has been scanned for malware by Websense. www.websense.com
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> 
> 
> 
> Clique 
> aqui<https://www.mailcontrol.com/sr/Vlh7PKLuTJ!TndxI!oX7UlFqrXJaieUT8OW42Bdxo2k2mMakQ+DSWy9n!0qvuD3oPArrMVed1AizpFBU8KFm0g==>
>  para reportar este e-mail como SPAM.
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a