Hola a todos, tengo una pregunta sobre una query y me gustaría saber si es posible realizarla. Tengo dos tablas compras y ventas:
Tabla compras      Tabla ventas
key_articulo            key_articulo
fecha_desde            fecha
fecha_hasta            cantidad
cantidad

Pues bien, mi intención es pasarle a una función como parámetros la key_articulo y una fecha determinada, para después dentro de la función realizar una consulta sobre las dos tablas para que me devuelva la diferencia de cantidades entre ventas y compras teniendo como parámetros de búsqueda la key_articulo pasado en la función y la fecha, con esto me tendría que devolver de la tabla de compras el registro en el cuál la fecha pasada por parámetro estuviese comprendida (entre fecha_desde y fecha_hasta, teniendo también en cuenta que puede que no haya ningún registro que coincida y entonces tendría que devolver cero para poder realizar la operación de resta de cantidades). Lo mismo sería con la de ventas, puede no existir registro y devolver ceros ó existir y ser el más cercano a la fecha pasada por parámetro por detrás ó igual. Estoy trabajando con la siguiente query pero no doy con ello (sobre todo el manejar que no me encuetre el registro correspondiente tanto en la tabla de compras ó de ventas.
El parámetro que le paso está en la variable v_key_articulo y en v_fecha

select c.key_articulo, coalesce((v.cantidad - c.cantidad), 0) as cantidad_real
from compras as c, ventas as v
where c.key_articulo = v_key_articulo and c.fecha_desde = (select max(cc.fecha_desde) from compras as cc where cc.fecha_desde <= v_fecha and cc.fecha_hasta >= v_fecha and cc.key_articulo = v_key_articulo) and v.fecha = (select vv.fecha from ventas as vv where vv.key_articulo = v_key_articulo and vv.fecha <= v_fecha order by fecha desc limit 1);
Gracias por la atención y un saludo.

--
José Alberto Sánchez Nieto
Responsable Dpto. Informática

Hiper Usera, S.L.
C.I.F. B85139855
Pol. Industrial Las Avenidas
Torrejón de la Calzada (Madrid)
C.P. 28991
Telf: 91 860 99 00
Fax: 91 816 00 00
email: [email protected]


--
TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo

Responder a