Opa,
segue um exemplo =>
SELECT cd_days FROM (SELECT cd_days, ROW_NUMBER() OVER (ORDER BY cd_days)
R from teste d where cd_marca = 2 AND d.contract_type = 'GERAL'
and d.logistic_contract is not NULL) WHERE R BETWEEN 10 and 20;
Abs,
Em Quarta-feira, 3 de Janeiro de 2018 13:04, "[email protected]
[oracle_br]" <[email protected]> escreveu:
Pra não ficar só no bláblablá, vamos a um exemplo - suponha que eu quero
agrupar por departamento, e para cada departamento eu quero ordenar por Salário
e mostrar os 3 primeiros salários, e tenho os seguintes dados :
scott@DESENV:SQL>select deptno, empno, sal from emp order by deptno, sal;
DEPTNO EMPNO SAL
--------- --------- ---------
10 7934 1300
10 7782 2450
10 7839 5000
20 7369 800
20 7876 1100
20 7566 2975
20 7788 3000
20 7902 3000
30 7900 950
30 7654 1250
30 7521 1250
30 7844 1500
30 7499 1600
30 7698 2850
14 linhas selecionadas.
PERCEBA que para o departamento 30 o segundo e o terceiro salário empataram,
ambos recebem 1250... Aí vem a pergunta, o que faço nesse caso ? Se vc quer
simplesmente mostrar os 3 salarios ordenados SEM se importar com desempates
seria simplesmente atribuir um número sequencial pra cada registro dentro do
grupo E filtrar depois onde esse número seja < 4 (ou <= 3, como preferir)....
Tipo :
scott@DESENV:SQL>SELECT deptno,
2 empno,
3 sal,
4 row_number() OVER (PARTITION BY deptno ORDER BY sal) AS NUM_REG
5* FROM emp;
DEPTNO EMPNO SAL NUM_REG
--------- --------- --------- ---------
10 7934 1300 1
10 7782 2450 2
10 7839 5000 3
20 7369 800 1
20 7876 1100 2
20 7566 2975 3
20 7788 3000 4
20 7902 3000 5
30 7900 950 1
30 7654 1250 2
30 7521 1250 3
30 7844 1500 4
30 7499 1600 5
30 7698 2850 6
14 linhas selecionadas.
scott@DESENV:SQL>
==> Tá vendo ? Os registros foram AGRUPADOS por DEPTNO e o NUM_REG é resetado a
cada vez que muda de DEPTO, essa lógica é Automágica nas funções analíticas....
Vamos filtrar por esse número, para receber só os 3 primeiros registros do
grupo ? Isso vai ficar :
scott@DESENV:SQL>select * from (
2 SELECT deptno,
3 empno,
4 sal,
5 row_number() OVER (PARTITION BY deptno ORDER BY sal) AS NUM_REG
6 FROM emp )
7* WHERE NUM_REG < 4;
DEPTNO EMPNO SAL NUM_REG
--------- --------- --------- ---------
10 7934 1300 1
10 7782 2450 2
10 7839 5000 3
20 7369 800 1
20 7876 1100 2
20 7566 2975 3
30 7900 950 1
30 7521 1250 2
30 7654 1250 3
9 linhas selecionadas.
scott@DESENV:SQL>
Simples, só encapsulei o agrupamento num sub-query para poder aplicar um WHERE
nele... Não é ? SE é isso que vc quer (simplesmente listar os 3 primeiros
dentro de cada grupo, SEM se preocupar com empates) tá feita a fofoca...
Já se neste meu exemplo eu quisesse que quando houvesse empate (por exemplo, no
depto 30 a terceira linha fosse o salário 1500, desconsiderando o empate em
1250) aí eu usaria algo tipo DENSE_RANK :
scott@DESENV:SQL>SELECT deptno,
2 empno,
3 sal,
4 dense_rank() OVER (PARTITION BY deptno ORDER BY sal) AS NUM_REG
5* FROM emp
scott@DESENV:SQL>/
DEPTNO EMPNO SAL NUM_REG
--------- --------- --------- ---------
10 7934 1300 1
10 7782 2450 2
10 7839 5000 3
20 7369 800 1
20 7876 1100 2
20 7566 2975 3
20 7788 3000 4
20 7902 3000 4
30 7900 950 1
30 7654 1250 2
30 7521 1250 2
30 7844 1500 3
30 7499 1600 4
30 7698 2850 5
14 linhas selecionadas.
scott@DESENV:SQL>
==>> PERCEBA que no departamento 30 a segunda posição foi um empate, ambos
'dividiram o pódio' na medalha de prata....Sacou ?? É ISSO que eu solicitei que
vc verificasse com teu Analista pra saber se é o que ele quer - via de regra,
99,99% das vezes quando neguim fala em N primeiros ou N últimos registros não
pensam nesses pontos de DESEMPATE....
[]s
Chiappa #yiv0849792652 #yiv0849792652 -- #yiv0849792652ygrp-mkp {border:1px
solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;}#yiv0849792652
#yiv0849792652ygrp-mkp hr {border:1px solid #d8d8d8;}#yiv0849792652
#yiv0849792652ygrp-mkp #yiv0849792652hd
{color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px
0;}#yiv0849792652 #yiv0849792652ygrp-mkp #yiv0849792652ads
{margin-bottom:10px;}#yiv0849792652 #yiv0849792652ygrp-mkp .yiv0849792652ad
{padding:0 0;}#yiv0849792652 #yiv0849792652ygrp-mkp .yiv0849792652ad p
{margin:0;}#yiv0849792652 #yiv0849792652ygrp-mkp .yiv0849792652ad a
{color:#0000ff;text-decoration:none;}#yiv0849792652 #yiv0849792652ygrp-sponsor
#yiv0849792652ygrp-lc {font-family:Arial;}#yiv0849792652
#yiv0849792652ygrp-sponsor #yiv0849792652ygrp-lc #yiv0849792652hd {margin:10px
0px;font-weight:700;font-size:78%;line-height:122%;}#yiv0849792652
#yiv0849792652ygrp-sponsor #yiv0849792652ygrp-lc .yiv0849792652ad
{margin-bottom:10px;padding:0 0;}#yiv0849792652 #yiv0849792652actions
{font-family:Verdana;font-size:11px;padding:10px 0;}#yiv0849792652
#yiv0849792652activity
{background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv0849792652
#yiv0849792652activity span {font-weight:700;}#yiv0849792652
#yiv0849792652activity span:first-child
{text-transform:uppercase;}#yiv0849792652 #yiv0849792652activity span a
{color:#5085b6;text-decoration:none;}#yiv0849792652 #yiv0849792652activity span
span {color:#ff7900;}#yiv0849792652 #yiv0849792652activity span
.yiv0849792652underline {text-decoration:underline;}#yiv0849792652
.yiv0849792652attach
{clear:both;display:table;font-family:Arial;font-size:12px;padding:10px
0;width:400px;}#yiv0849792652 .yiv0849792652attach div a
{text-decoration:none;}#yiv0849792652 .yiv0849792652attach img
{border:none;padding-right:5px;}#yiv0849792652 .yiv0849792652attach label
{display:block;margin-bottom:5px;}#yiv0849792652 .yiv0849792652attach label a
{text-decoration:none;}#yiv0849792652 blockquote {margin:0 0 0
4px;}#yiv0849792652 .yiv0849792652bold
{font-family:Arial;font-size:13px;font-weight:700;}#yiv0849792652
.yiv0849792652bold a {text-decoration:none;}#yiv0849792652 dd.yiv0849792652last
p a {font-family:Verdana;font-weight:700;}#yiv0849792652 dd.yiv0849792652last p
span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv0849792652
dd.yiv0849792652last p span.yiv0849792652yshortcuts
{margin-right:0;}#yiv0849792652 div.yiv0849792652attach-table div div a
{text-decoration:none;}#yiv0849792652 div.yiv0849792652attach-table
{width:400px;}#yiv0849792652 div.yiv0849792652file-title a, #yiv0849792652
div.yiv0849792652file-title a:active, #yiv0849792652
div.yiv0849792652file-title a:hover, #yiv0849792652 div.yiv0849792652file-title
a:visited {text-decoration:none;}#yiv0849792652 div.yiv0849792652photo-title a,
#yiv0849792652 div.yiv0849792652photo-title a:active, #yiv0849792652
div.yiv0849792652photo-title a:hover, #yiv0849792652
div.yiv0849792652photo-title a:visited {text-decoration:none;}#yiv0849792652
div#yiv0849792652ygrp-mlmsg #yiv0849792652ygrp-msg p a
span.yiv0849792652yshortcuts
{font-family:Verdana;font-size:10px;font-weight:normal;}#yiv0849792652
.yiv0849792652green {color:#628c2a;}#yiv0849792652 .yiv0849792652MsoNormal
{margin:0 0 0 0;}#yiv0849792652 o {font-size:0;}#yiv0849792652
#yiv0849792652photos div {float:left;width:72px;}#yiv0849792652
#yiv0849792652photos div div {border:1px solid
#666666;min-height:62px;overflow:hidden;width:62px;}#yiv0849792652
#yiv0849792652photos div label
{color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;}#yiv0849792652
#yiv0849792652reco-category {font-size:77%;}#yiv0849792652
#yiv0849792652reco-desc {font-size:77%;}#yiv0849792652 .yiv0849792652replbq
{margin:4px;}#yiv0849792652 #yiv0849792652ygrp-actbar div a:first-child
{margin-right:2px;padding-right:5px;}#yiv0849792652 #yiv0849792652ygrp-mlmsg
{font-size:13px;font-family:Arial, helvetica, clean, sans-serif;}#yiv0849792652
#yiv0849792652ygrp-mlmsg table {font-size:inherit;font:100%;}#yiv0849792652
#yiv0849792652ygrp-mlmsg select, #yiv0849792652 input, #yiv0849792652 textarea
{font:99% Arial, Helvetica, clean, sans-serif;}#yiv0849792652
#yiv0849792652ygrp-mlmsg pre, #yiv0849792652 code {font:115%
monospace;}#yiv0849792652 #yiv0849792652ygrp-mlmsg *
{line-height:1.22em;}#yiv0849792652 #yiv0849792652ygrp-mlmsg #yiv0849792652logo
{padding-bottom:10px;}#yiv0849792652 #yiv0849792652ygrp-msg p a
{font-family:Verdana;}#yiv0849792652 #yiv0849792652ygrp-msg
p#yiv0849792652attach-count span {color:#1E66AE;font-weight:700;}#yiv0849792652
#yiv0849792652ygrp-reco #yiv0849792652reco-head
{color:#ff7900;font-weight:700;}#yiv0849792652 #yiv0849792652ygrp-reco
{margin-bottom:20px;padding:0px;}#yiv0849792652 #yiv0849792652ygrp-sponsor
#yiv0849792652ov li a {font-size:130%;text-decoration:none;}#yiv0849792652
#yiv0849792652ygrp-sponsor #yiv0849792652ov li
{font-size:77%;list-style-type:square;padding:6px 0;}#yiv0849792652
#yiv0849792652ygrp-sponsor #yiv0849792652ov ul {margin:0;padding:0 0 0
8px;}#yiv0849792652 #yiv0849792652ygrp-text
{font-family:Georgia;}#yiv0849792652 #yiv0849792652ygrp-text p {margin:0 0 1em
0;}#yiv0849792652 #yiv0849792652ygrp-text tt {font-size:120%;}#yiv0849792652
#yiv0849792652ygrp-vital ul li:last-child {border-right:none
!important;}#yiv0849792652