Dê uma olhada nas funcoes LEAD e LAG acredito que é justamente o que vc
está procurando...
SELECT last_name, hire_date,
LEAD(hire_date, 1) OVER (ORDER BY hire_date) AS "NextHired"
FROM employees WHERE department_id = 30;
LAST_NAME HIRE_DATE NextHired
------------------------- --------- ---------
Raphaely 07-DEC-94 18-MAY-95
Khoo 18-MAY-95 24-JUL-97
Tobias 24-JUL-97 24-DEC-97
Baida 24-DEC-97 15-NOV-98
Himuro 15-NOV-98 10-AUG-99
Colmenares 10-AUG-99
SELECT last_name, hire_date, salary,
LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
FROM employees
WHERE job_id = 'PU_CLERK';
LAST_NAME HIRE_DATE SALARY PREV_SAL
------------------------- --------- ---------- ----------
Khoo 18-MAY-95 3100 0
Tobias 24-JUL-97 2800 3100
Baida 24-DEC-97 2900 2800
Himuro 15-NOV-98 2600 2900
Colmenares 10-AUG-99 2500 2600
Clayton Bonelli escreveu:
> nao entendi a segunda regra, mas para a primeira, conseguir o
> somatorio eh facil uma vez que voce pode usar as funcoes analiticas
> OVER. Segue abaixo um exemplo de uma tabela com dois campos (codigo e
> valor), e depois um select mostrando cada linha da tabela e uma coluna
> com o somatorio (linha a linha) do campo "valor"
>
> create table tblteste
> (
> codigo integer,
> valor number
> );
>
> insert into tblteste values(1,100);
> insert into tblteste values(2,110);
> insert into tblteste values(3,120);
> insert into tblteste values(4,130);
> insert into tblteste values(5,140);
> insert into tblteste values(6,150);
> insert into tblteste values(7,160);
> insert into tblteste values(8,170);
> insert into tblteste values(9,180);
> insert into tblteste values(10,190);
> insert into tblteste values(11,200);
> insert into tblteste values(12,210);
> commit;
>
> select codigo, valor, sum(valor) over (order by rownum) soma
> from tblteste;
>
> ----- Original Message -----
> From: Walquencir Pedroti
> To: oracle_br@yahoogrupos.com.br
> Sent: Wednesday, May 31, 2006 3:57 PM
> Subject: [oracle_br] Lógica SQL
>
>
> Pessoal não sei aonde estava pendendo a formatação.
> Estou enviando novamente sem formatação.
>
> Enviada em: quarta-feira, 31 de maio de 2006 15:08
> Para: 'oracle_br@yahoogrupos.com.br'
> Assunto: Lógica SQL
>
> Pessoal,
>
> A versão do oracle é 10g
>
> Como consigo montar uma consulta em uma tabela onde se tenha estas
> regras?
>
> Regras:
> 1) Totalizar um campo: ir somando o valor do campo e mostrando linha
> a linha, no exemplo o campo "total1" foi sendo somado no campo "total2"
>
> 2) Fazer uma restrição e dependendo da resposta da primeira
> restrição fazer na seqüência outra restrição. No exemplo a "linha 13"
> não poderia ser mostrada
>
> O que se espera:
>
> |Tabela LCR0A0
> +-------+---------+-------+------+-------+-----------+ +--------------+
> | Linha | Controle|Reserva|Local | Tipo | Total 1 | | Total 2 |
> +-------+---------+-------+------+-------+-----------+ +--------------+
> | 1 | 264512 |13607 |1574 | 0 | 3.089,50 | | 3.089,50 |
> | 2 | 264513 |13607 |1574 | 0 | 2.627,00 | | 5.716,50 |
> | 3 | 264547 |1 |1579 | 0 | 9.100,00 | | 14.816,50 |
> | 4 | 264548 |7296 |1596 | 0 | 9.000,00 | | 23.816,50 |
> | 5 | 264553 |1 |1579 | 0 | 19.041,00 | | 42.857,50 |
> | 6 | 264554 |7296 |1596 | 0 | 6.000,00 | | 48.857,50 |
> | 7 | 264555 |1 |1579 | 0 | 7.868,00 | | 56.725,50 |
> | 8 | 264562 |13216 |1696 | 0 | 9.000,00 | | 65.725,50 |
> | 9 | 264563 |24037 |1596 | 0 | 9.000,00 | | 74.725,50 |
> | 10 | 264572 |1 |1579 | 0 | 15.999,00 | | 90.724,50 |
> | 11 | 264581 |7296 |1596 | 0 | 6.000,00 | | 96.724,50 |
> | 12 | 264582 |1 |1579 | 0 | 3.600,00 | | 100.324,50 |
> | 13 | 0 |42 |1574 | 0 | 100,00 |
> | | Não Mostra
> | 14 | 271184 |42 |1574 | 0 | 100,00 | | 100.424,50 |
> +-------+---------+-------+------+-------+-----------+ +--------------+
>
> SE reserva = 42 SE controle != 0 "mostro
> linha"
> SE reserva = 42 SE controle = 0 "NÃO mostro
> linha"
> ------------------------------------
> O sql básico foi montado desta maneira
> |Tabela LCR0A0
> +-------+---------+-------+------+-------+-----------+ +--------------+
> | Linha | Controle|Reserva|Local | Tipo | Total 1 | | Total
> 2 |
> +-------+---------+-------+------+-------+-----------+ +--------------+
> select LINHA, CONTROLE, RESERVA, LOCAL, TIPO, TOTAL1
> from LCR0A0
> where RESERVA != 74
> and LOCAL NOT like '%99'
> and LOCAL NOT like '%991'
> and TIPO=0
> order by TIPO, CONTROLE
>
>
> Quem puder responder agradeço
> WPedroti
>
>
>
>
>
> --------------------------------------------------------------------------------------------------------------------------
> Atenção! As mensagens deste grupo são de acesso público e de inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
>
> --------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
>
> Este Grupo recebe o apoio da SQL Magazine -
> www.devmedia.com.br/sqlmagazine
> __________________________________________________________________
> O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo,
> tenha o link do mesmo para evitar trafego(pedidos) desnecessário.
>
>
> Yahoo! Grupos, um serviço oferecido por:
> PUBLICIDADE
>
>
>
>
> ------------------------------------------------------------------------------
> Links do Yahoo! Grupos
>
> a.. Para visitar o site do seu grupo na web, acesse:
> http://br.groups.yahoo.com/group/oracle_br/
>
> b.. Para sair deste grupo, envie um e-mail para:
> [EMAIL PROTECTED]
>
> c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
> Serviço do Yahoo!.
>
>
>
>
> ------------------------------------------------------------------------------
>
>
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.1.394 / Virus Database: 268.8.0/352 - Release Date: 30/5/2006
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> --------------------------------------------------------------------------------------------------------------------------
> Atenção! As mensagens deste grupo são de acesso público e de inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> --------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
>
> Este Grupo recebe o apoio da SQL Magazine -
> www.devmedia.com.br/sqlmagazine
> __________________________________________________________________
> O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo,
> tenha o link do mesmo para evitar trafego(pedidos) desnecessário.
>
>
> *Yahoo! Grupos, um serviço oferecido por:*
> PUBLICIDADE
> <http://br.ard.yahoo.com/SIG=12fsf7bdh/M=396559.7942981.9535540.2369893/D=brclubs/S=2137114689:HM/Y=BR/EXP=1149116048/A=3739190/R=0/id=noscript/SIG=154dcqslu/*http://lt.dell.com/lt/lt.aspx?CID=13040&LID=340715&DGC=BA&DGSeg=DHS&DURL=http://www1.la.dell.com/content/products/category.aspx/desktops?c%3dbr%26l%3dpt%26s%3ddhs>
>
>
>
> ------------------------------------------------------------------------
> *Links do Yahoo! Grupos*
>
> * Para visitar o site do seu grupo na web, acesse:
> http://br.groups.yahoo.com/group/oracle_br/
>
> * Para sair deste grupo, envie um e-mail para:
> [EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>
>
> * O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
> Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.
>
>
[As partes desta mensagem que não continham texto foram removidas]
--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine
__________________________________________________________________
O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário.
Yahoo! Grupos, um serviço oferecido por: | |
|
Links do Yahoo! Grupos
- Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/
- Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.