Query sin cursores...Ayuda!!!!

18/07/2008 - 13:22 por hamil1978 | Informe spam
Hola amigos.

En una tabla tengo la siguiente informacion

Tabla: Movimientos
Articulo Empresa Fecha Cantidad
M07033 is 2007-06-29 9
M07033 is 2007-07-13 4
M07033 is 2007-08-03 3
M07033 is 2007-12-31 5
M07033 is 2008-02-29 12
M07033 is 2008-03-06 20
M07033 is 2008-04-24 19

Para una intervalo de fechas 2008-05-03 y 2008-05-05, por ejemplo
genero una tabla Stock, para lo cual tengo que calcular el Stock a la
Fecha.

Tabla: Stock
Articulo Empresa Fecha Stock_Fecha
M07033 is 2008-05-03 19
M07033 is 2008-05-04 19
M07033 is 2008-05-05 19

De la tabla movimientos tomaría el inmediato inferior a la fecha del
stock, en este caso el valor 19 (2008-04-24).

Con cursores almacenaria los valores de la tabla Stock, y luego al
recorrer realizaría una comparación con la tabla movimientos y
obtendria el valor inferior inmediato a la fecha, pero es demasiado
lento mi cursor por lo que pido su ayuda.

Gracias amigos

Preguntas similare

Leer las respuestas

#6 Carlos M. Calvelo
20/07/2008 - 23:54 | Informe spam
Hola,

On 20 jul, 14:48, wrote:
Mostrar la cita
Pues no hace falta la clave primaria entonces. Yo no sabía
que querías sumar todo por {articulo,empresa,fecha}.

A ver si ahora he entendido bien y prueba esto:

DECLARE @fecha_inicio DATETIME, @fecha_final DATETIME

SET @fecha_inicio = '20080503'
SET @fecha_final = '20080505'

SELECT
Empresa, Articulo, F.Fecha, Stock_Fecha, Importe_Fecha
FROM
(
SELECT
Empresa,
Articulo,
CAST(DATEDIFF(day,0,Fecha) AS DATETIME) AS Fecha,
ISNULL(SUM(Cantidad),0) AS Stock_Fecha,
ISNULL(SUM(Importe),0) AS Importe_Fecha
FROM
Movimientos
WHERE
Fecha < @Fecha_final + 1
GROUP BY
Empresa,
Articulo,
CAST(DATEDIFF(day,0,Fecha) AS DATETIME)
) M
RIGHT JOIN dbo.Fechas(@fecha_inicio, @fecha_final) F
ON M.Fecha <= F.Fecha
WHERE
F.Fecha >= @fecha_inicio AND
M.Fecha = (SELECT MAX(Fecha)
FROM Movimientos
WHERE Empresa=M.Empresa AND
Articulo=M.Articulo AND
Fecha <= F.Fecha)
ORDER BY
Empresa, Articulo, F.Fecha
-

Saludos,
Carlos
#7 Carlos M. Calvelo
21/07/2008 - 00:38 | Informe spam
Hola,

Mostrar la cita
Este where no funciona si las fechas en la tabla Movimientos tienen
valores distintos a 0 depués de la fecha (horas, minutos, etc)

Esta irá mejor:


DECLARE @fecha_inicio DATETIME, @fecha_final DATETIME

SET @fecha_inicio = '20080503'
SET @fecha_final = '20080505'

SELECT
Empresa, Articulo, F.Fecha, Stock_Fecha, Importe_Fecha
FROM
(
SELECT
Empresa,
Articulo,
CAST(DATEDIFF(day,0,Fecha) AS DATETIME) AS Fecha,
ISNULL(SUM(Cantidad),0) AS Stock_Fecha,
ISNULL(SUM(Importe),0) AS Importe_Fecha
FROM
Movimientos
WHERE
Fecha < @Fecha_final + 1
GROUP BY
Empresa,
Articulo,
CAST(DATEDIFF(day,0,Fecha) AS DATETIME)
) M
RIGHT JOIN dbo.Fechas(@fecha_inicio, @fecha_final) F
ON M.Fecha <= F.Fecha
WHERE
F.Fecha >= @fecha_inicio AND
M.Fecha = (SELECT MAX(DATEDIFF(day,0,Fecha))
FROM Movimientos
WHERE Empresa=M.Empresa AND
Articulo=M.Articulo AND
DATEDIFF(day,0,Fecha) <= F.Fecha)
ORDER BY
Empresa, Articulo, F.Fecha
-

Saludos,
Carlos
#8 hamil1978
21/07/2008 - 23:55 | Informe spam
Perfecta la ayuda Carlos, bueno esto ya lo tengo, mañana probare con
Reporting Services y veremos como va quedando todo.

Si necesito ayuda ya me veras por el foro.

Saludos Carlos y gracias nuevamente.



-
On 21 jul, 00:38, "Carlos M. Calvelo" wrote:
Mostrar la cita
Ads by Google
Search Busqueda sugerida