Sé libre de compartir nuestro espacio y códigos con otro, danos de tu ayuda para ampliar esta comunidad.
Solución:
Él OVER
La cláusula especifica la partición, el orden y la ventana “sobre los cuales” opera la función analítica.
Ejemplo #1: calcular un promedio móvil
AVG(amt) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
date amt avg_amt
===== ==== =======
1-Jan 10.0 10.5
2-Jan 11.0 17.0
3-Jan 30.0 17.0
4-Jan 10.0 18.0
5-Jan 14.0 12.0
Opera sobre una ventana móvil (3 filas de ancho) sobre las filas, ordenadas por fecha.
Ejemplo #2: calcular un saldo corriente
SUM(amt) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
date amt sum_amt
===== ==== =======
1-Jan 10.0 10.0
2-Jan 11.0 21.0
3-Jan 30.0 51.0
4-Jan 10.0 61.0
5-Jan 14.0 75.0
Opera sobre una ventana que incluye la fila actual y todas las filas anteriores.
Nota: para un agregado con un OVER
cláusula que especifica un género ORDER
la ventana predeterminada es UNBOUNDED PRECEDING
para CURRENT ROW
por lo que la expresión anterior se puede simplificar a, con el mismo resultado:
SUM(amt) OVER (ORDER BY date)
Ejemplo #3: calcular el máximo dentro de cada grupo
MAX(amt) OVER (PARTITION BY dept)
dept amt max_amt
==== ==== =======
ACCT 5.0 7.0
ACCT 7.0 7.0
ACCT 6.0 7.0
MRKT 10.0 11.0
MRKT 11.0 11.0
SLES 2.0 2.0
Opera sobre una ventana que incluye todas las filas de un departamento en particular.
Violín SQL: http://sqlfiddle.com/#!4/9eecb7d/122
Puede usarlo para transformar algunas funciones agregadas en analíticas:
SELECT MAX(date)
FROM mytable
regresará 1
fila con un solo máximo,
SELECT MAX(date) OVER (ORDER BY id)
FROM mytable
devolverá todas las filas con un máximo acumulado.
Es parte de las funciones analíticas de Oracle.