Re: duda en la realizacion de una consulta

From: Jose Alberto Sanchez Nieto <albertosanchez(at)hiperusera(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: duda en la realizacion de una consulta
Date: 2010-04-07 15:35:12
Message-ID: 4BBCA630.8010101@hiperusera.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias Fernando por responder, la tabla de compras es una dimensión de
un datawarehouse y las dimensiones siempre tienen "vigencia" del registro
en cuestión de ahí lo de fecha_desde y fecha_hasta. La posibilidad que
me envías también la realicé antes pero ahora las especificaciones que
me han
dado son que se tiene que realizar en una consulta (de hecho devuelvo la
fila con setof record en la función), deben ser con una consulta ya que
puede ser
llamada desde una herramienta de reportes y ahí sólo se le puede indicar
consultas y no funciones.
Muchas gracias.

Fernando Hevia escribió:
>
>
>
>> -----Mensaje original-----
>> De: Jose Alberto Sanchez Nieto
>>
>> 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);
>>
>
> No entiendo porque en compras tenés fecha_desde y fecha_hasta. ¿Acaso es un
> sumarizado?
> Si te interpreté bien, propongo un approach más sencillo aprovechando que
> admites una función:
>
> CREATE OR REPLACE FUNCTION f_delta_mov_articulo(v_key_articulo bigint,
> v_fecha date) RETURNS integer AS
> $$
> DECLARE
> cant_compras integer;
> cant_ventas integer;
>
> BEGIN
> cant_compras :=
> SELECT coalesce(cantidad, 0) FROM compras
> WHERE v_fecha BETWEEN fecha_desde AND fecha_hasta
> AND key_articulo = v_key_articulo;
>
> cant_ventas :=
> SELECT coalesce(cantidad, 0) FROM ventas
> WHERE fecha <= v_fecha
> AND key_articulo = v_key_articulo
> ORDER BY fecha DESC LIMIT 1;
>
> RETURN cant_ventas - cant_compras;
> END;
> $$ LANGUAGE 'plpgsql;
>
> Saludos,
> Fernando.
>
>
>

--
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: albertosanchez(at)hiperusera(dot)es

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Juan Manuel Fernandez 2010-04-07 15:37:02 Re: if en una consulta
Previous Message Fernando Hevia 2010-04-07 15:34:00 RE: duda en la realizacion de una consulta