la query seria esta :
Código SQL:
Ver originalGO
WITH fechas
AS
(
SELECT CAST ('20150601' AS DATE) AS Fecha
UNION ALL
SELECT DATEADD (D, 1, FECHA) AS FECHA
FROM FECHAS WHERE FECHA < CAST ('20150831' AS DATE)
)
SELECT f.Fecha,
LAG((isnull(depositos.suma_dinero,0) - isnull(sales.total_de_montos,0)),1,0) OVER (ORDER BY f.Fecha) AS saldo_inicial,
ISNULL (depositos.suma_dinero,0) AS compras,
ISNULL(sales.total_de_montos, 0) AS total_ventas,
(LAG((isnull(depositos.suma_dinero,0) - isnull(sales.total_de_montos,0)),1,0) OVER (ORDER BY f.Fecha)+(isnull(depositos.suma_dinero,0) - isnull(sales.total_de_montos,0)) ) AS saldo_final
FROM fechas f
LEFT JOIN (
SELECT SUM(t.monto) AS total_de_montos,
COUNT(t.monto) AS numero_montos ,
CONVERT(DATE,t.fecha_ingreso) AS fecha_ingreso
FROM ventas t
WHERE (t.fecha_ingreso <=(SELECT DATEADD(ms,-3,DATEADD(dd,DATEDIFF(dd,0,GETDATE()),1))) AND t.fecha_ingreso >= (SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))) AND t.id_usuario = 29
GROUP BY CONVERT(DATE,t.fecha_ingreso)
) sales
ON sales.fecha_ingreso = f.Fecha
LEFT JOIN (
SELECT COUNT (dh.monto) AS dinero_depositado,
SUM (dh.monto) AS suma_dinero,
dh.fecha_deposito
FROM usuario u
INNER JOIN depositos_historicos dh
ON u.usuario_id = dh.id_usuario
WHERE u.usuario_id = 29 AND dh.id_estatus = 3
GROUP BY dh.fecha_deposito
) depositos
ON depositos.fecha_deposito = f.Fecha
ORDER BY f.Fecha ASC
OPTION(maxrecursion 0)
GO