none
Obtener saldo anterior al filtrar por fechas RRS feed

  • Pregunta

  • Buen día, tengo una consulta en la que obtengo el deseo obtener el saldo anterior, quisiera saber si al momento de filtrar por fechas la consulta pueda ser mostrada como en el siguiente ejemplo:

    como se dan cuenta se ha filtrado desde el 02/01/2017 hasta el 06/01/2017 y por el articulo "PAJILLA PRENSADA LOS ANGELES  30 KG BLANCAS", pero ademas se obtiene el saldo anterior, lo que quisiera saber es como lograr mostrar ese saldo anterior.

    La consulta que he realizado es la siguiente:

    DECLARE @FECHA AS VARCHAR(12)

    DECLARE @FECHA1 AS VARCHAR (12)

    SET @FECHA = '01/01/2017'

    SET @FECHA1 = '08/11/2017'

    SELECT  FECHA, CODIGO, ARTICULO,

    ISNULL(sum(ENTRADA - SALIDA) OVER(PARTITION BY ARTICULO ORDER BY FECHA    ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING),0)

     AS SALDO_ANTERIOR,

    ENTRADA AS ENTRADA, SALIDA AS SALIDA,

    sum(ENTRADA - SALIDA) OVER(PARTITION BY ARTICULO  ORDER BY FECHA ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

           AS SALDO,  PROVEEDOR_CLIENTE, OPERACION, ALMACEN

     FROM z_Mov_Almacen_AgrupXTipo_Ope

    WHERE FECHA BETWEEN  (@FECHA) AND @FECHA1 and   ARTICULO = 'UREA AGRICOLA'

    GROUP BY FECHA, CODIGO, ENTRADA, SALIDA, SALDO_ANTERIOR,PROVEEDOR_CLIENTE, OPERACION, ALMACEN, ARTICULO

    miércoles, 13 de diciembre de 2017 16:16

Respuestas

  • Logre extraer el saldo anterior con esta consulta

    DECLARE @FECHA AS VARCHAR(10) DECLARE @FECHA1 AS VARCHAR (10)

    SET @FECHA = '01/09/2017' SET @FECHA1 = '20/11/2017'

    SELECT FECHA, M.CODIGO, M.SALDO_ANTERIOR, M.ENTRADA, M.SALIDA, M.SALDO  FROM (

    SELECT  MES, FECHA, CODIGO, ARTICULO,

    ISNULL(sum(ENTRADA - SALIDA) OVER(PARTITION BY ARTICULO ORDER BY (FECHA) ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING),0)

     AS SALDO_ANTERIOR,

    ENTRADA AS ENTRADA, SALIDA AS SALIDA,

    sum(ENTRADA - SALIDA) OVER(PARTITION BY ARTICULO  ORDER BY (FECHA) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

    AS SALDO,  PROVEEDOR_CLIENTE, OPERACION, ALMACEN

    FROM z_Mov_Almacen_AgrupXTipo_Ope

    GROUP BY FECHA, MES, CODIGO, ENTRADA, SALIDA, SALDO_ANTERIOR,PROVEEDOR_CLIENTE, OPERACION, ALMACEN, ARTICULO

    ) AS M

    WHERE  FECHA BETWEEN  (@FECHA) AND @FECHA1 and   ARTICULO = 'AGUA'

    y el resultado es el siguiente:

    • Marcado como respuesta Abram N. Cueva lunes, 18 de diciembre de 2017 21:26
    lunes, 18 de diciembre de 2017 21:26

Todas las respuestas

  • ¿Guardas los saldos de los cortes por periodo que se realizan?, de ser así, bastará con ir al último corte y tomar el saldo, si no es así tendrás que barrer por todas las operaciones antes de la fecha de inicio y el resultado unir al conjunto que retorna la consulta que adjuntas. Por otro lado, ¿el valor que esperas no lo tienes en la columna 'SALDO_ANTERIOR'?

    miércoles, 13 de diciembre de 2017 16:59
  • No guardo los saldos por periodo, en la columna saldo anterior si obtengo el el saldo de la fecha anterior, como se ve en la imagen

    pero por ejemplo cuando la búsqueda la hago por el rango de fechas entre el '01/08/2017' y '08/11/2017', me aparece en SALDO_ANTERIOR "0", lo que quisiera saber es como podría obtener el saldo_anterior que fue de '999999'


    miércoles, 13 de diciembre de 2017 17:19
  • Recupera el saldo anterior a la fecha de inicio del reporte, une la fila con el resultado de la consulta a través del operador UNION y sobre el conjunto acumula las entradas y salidas para determinar el saldo.

    SELECT
        -- Columns list
    FROM
        (
    	   SELECT MAX(Fecha), 'SALDO' AS Documento, SUM(Entrada - Salida) AS Entrada, NULL AS Salida
    	   FROM Tabla WHERE Fecha < @FechaInicio
    	   UNION ALL
    	   SELECT Fecha, Documento, Entrada, Salida 
    	   FROM Tabla WHERE Fecha BETWEEN @FechaInicio AND @FechaFin
        ) m
    GO


    jueves, 14 de diciembre de 2017 5:13
  • Ejecute la consulta que propusiste y me muestra el siguiente resultado


    como haria para que esa primera fila que es el saldo empiece a sumar y restar con las siguientes filas y el saldo se muestre en otra columna, algo parecido a la primera imagen que mostre???

    jueves, 14 de diciembre de 2017 7:01
  • with mycte as (elselectanterior) select  fecha,documento,entrada,salida,sum(entrada-salida) over (order by fecha) from mycte


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 14 de diciembre de 2017 7:04
    Moderador
  • ¿cómo haría para que esa primera fila que es el saldo empiece a sumar y restar con las siguientes filas y el saldo se muestre en otra columna, algo parecido a la primera imagen que mostré???

    Es sólo darle forma a los resultados, de hecho tienes la idea en el código que has adjuntado.

    SELECT 
        m.Fecha, m.Documento, CASE WHEN m.Documento <> 'SALDO' THEN m.Entrada END AS Entrada, 
        m.Salida,SUM(COALESCE(m.Entrada, 0) - COALESCE(m.Salida, 0)) OVER (ORDER BY 
    	   m.Fecha, m.Documento ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
    FROM
        (
    	   --
        ) m

    jueves, 14 de diciembre de 2017 14:27
  • Hola que tal, hice caso a sus sugerencias y aplique cte , como muestro en la siguiente consulta:

    WITH  CTE as (SELECT M.FECHA, M.DOCUMENTO, M.ENTRADA, M.SALIDA, M.SALDO

    FROM

    ((select MAX(FECHA) AS FECHA, 'SALDO' AS DOCUMENTO, '0' AS ENTRADA, '0' AS SALIDA, SUM(ENTRADA-SALIDA) as SALDO

    FROM z_Mov_Almacen_AgrupXTipo_Ope  WHERE FECHA < '01/09/2017' AND ARTICULO = 'AGUA'

    UNION ALL

    SELECT FECHA, CODIGO, ENTRADA, SALIDA, '0' SALDO1

    FROM z_Mov_Almacen_AgrupXTipo_Ope WHERE FECHA BETWEEN   ('01/09/2017') AND '08/11/2017' AND ARTICULO = 'AGUA'

    )) M

    )

    select  FECHA,documento,entrada,salida,sum(entrada-salida) OVER(ORDER BY (FECHA)) AS SALDO

    from CTE

    group by SALDO, CTE.FECHA, CTE.DOCUMENTO, CTE.ENTRADA, CTE.SALIDA;

    pero me muestra el siguiente resultado, el cual no es el correcto, ya que en el primer saldo deberia mostrar 999999,  y asi mostrar el saldo correcto, pero por algun motivo no logro conseguirlo


    lunes, 18 de diciembre de 2017 18:01
  • Logre extraer el saldo anterior con esta consulta

    DECLARE @FECHA AS VARCHAR(10) DECLARE @FECHA1 AS VARCHAR (10)

    SET @FECHA = '01/09/2017' SET @FECHA1 = '20/11/2017'

    SELECT FECHA, M.CODIGO, M.SALDO_ANTERIOR, M.ENTRADA, M.SALIDA, M.SALDO  FROM (

    SELECT  MES, FECHA, CODIGO, ARTICULO,

    ISNULL(sum(ENTRADA - SALIDA) OVER(PARTITION BY ARTICULO ORDER BY (FECHA) ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING),0)

     AS SALDO_ANTERIOR,

    ENTRADA AS ENTRADA, SALIDA AS SALIDA,

    sum(ENTRADA - SALIDA) OVER(PARTITION BY ARTICULO  ORDER BY (FECHA) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

    AS SALDO,  PROVEEDOR_CLIENTE, OPERACION, ALMACEN

    FROM z_Mov_Almacen_AgrupXTipo_Ope

    GROUP BY FECHA, MES, CODIGO, ENTRADA, SALIDA, SALDO_ANTERIOR,PROVEEDOR_CLIENTE, OPERACION, ALMACEN, ARTICULO

    ) AS M

    WHERE  FECHA BETWEEN  (@FECHA) AND @FECHA1 and   ARTICULO = 'AGUA'

    y el resultado es el siguiente:

    • Marcado como respuesta Abram N. Cueva lunes, 18 de diciembre de 2017 21:26
    lunes, 18 de diciembre de 2017 21:26