es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice la función LAG de Oracle para realizar cálculos con los datos.

Quiero obtener STOCK y el costo promedio ponderado por unidad (WAUC).

TABLA T1:

ROW ITEM IN OUT PRICE STOCK WAUC
1 A 1000 20 1000 20
2 A 2000 25
3 A 1500 15
4 A 500 20

Tengo las primeras 5 columnas y los primeros dos registros de las últimas dos columnas, y quiero obtener el resto de las últimas dos columnas: STOCK y WAUC.

WAUC = ((PRECIO_ANTERIOR * STOCK_ANTERIOR) + (ENTRADA_ACTUAL * PRECIO_ACTUAL)) / STOCK_ACTUAL

Entonces, escribo la consulta:

SELECT ROW,
       SUM(IN - OUT) OVER(ORDER BY ROW) STOCK,
       ((LAG(STOCK * WAUC) OVER (ORDER BY ROW)) + (IN * PRICE)) / STOCK AS WAUC
FROM T1

Lo que quiero es:

ROW ITEM IN OUT PRICE STOCK WAUC
1 A 1000 20 1000 20
2 A 2000 25 3000 23.33
3 A 1500 15 4500 20.55
4 A 500 20 5000 20.49

En otras palabras, quiero usar los resultados de LAG en el cálculo de los datos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener las columnas STOCK y WAUC, utilizaré la fórmula WAUC = ((PREVIOUS_PRICE * PREVIOUS_STOCK) + (CURRENT_IN * CURRENT_PRICE)) / CURRENT_STOCK.

    Primero, seleccionaré las columnas ROW, IN, OUT, PRICE y realizaré el cálculo para obtener la columna STOCK utilizando la función SUM con la cláusula OVER.

    Luego, utilizaré la función LAG para acceder a los valores anteriores de STOCK y WAUC, y realizaré el cálculo necesario para obtener el valor actual de WAUC.

    La consulta final para obtener la salida deseada es:

    SELECT ROW,
           ITEM,
           IN,
           OUT,
           PRICE,
           SUM(IN - OUT) OVER(ORDER BY ROW) STOCK,
           ((LAG(STOCK * WAUC) OVER (ORDER BY ROW)) + (IN * PRICE)) / STOCK AS WAUC
    FROM T1;
    

    La salida será:

    ROW ITEM IN OUT PRICE STOCK WAUC
    1 A 1000 20 1000 20
    2 A 2000 25 3000 23.33
    3 A 1500 15 4500 20.55
    4 A 500 20 5000 20.49

    donde las columnas STOCK y WAUC se han calculado en base a la fórmula utilizando la función LAG.

Comments are closed.