Re: consulta realizacion de una select]

From: Jose Alberto Sanchez Nieto <albertosanchez(at)hiperusera(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: consulta realizacion de una select]
Date: 2010-03-26 17:28:35
Message-ID: 4BACEEC3.3040107@hiperusera.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ante todo gracias por la respuesta, la he probado pero no me dá el
resultado esperado,
en principio no necesito que los registros de compras y ventas tengan
ninguna relación,
el final de la consulta es que un usuario diga: ¿qué margen del producto
x tenía en la fecha z?
A partir de ahí basándome en el producto solicitado es recuperar de la
tabla compras el valor
de las compras que es un acumulado (aunque puede que en la fecha z que
me piden no se hiciera
ninguna compra, por eso necesitaría la compra más cercana a la fecha z
que fué la última), y también obtener
de la tabla ventas la línea de venta con el acumulado más cercano a la
fecha pasada por parámetro)
con esto dividir estas dos cantidades y sacar el margen del producto, un
día se ha podido comprar pero no vender
y el otro al revés, por eso también utilizo el limit para que me
devuelva sólo el registro más cercano a la fecha
pasada por parámetro que es donde llevo la cantidad acumulada.
Gracias por la atención y un saludo.

2010/3/26 Jose Alberto Sanchez Nieto <albertosanchez(at)hiperusera(dot)es>:
> Hola a todos, estoy empezando con postgres y sql y me surge una duda en una
> consulta que supongo será fácil pero que me cuesta, tengo una TablaA y
> TablaB con la siguiente estructura:
> TablaA TablaB
> id integer primary key id integer primary key
> valor_compra numeric(12,2) valor_venta numeric(12,2)
> fecha Date fecha Date
> key integer key integer
>
> El caso es que quiero hacer una consulta que me devuelva una sola fila con
> los campos que necesito de cada tabla con las siguientes directrices:
> - El campo de unión de las dos tablas es key (se pasará como parámetro para
> realizar la unión)
> - Se pasará otro parámetro que será una fecha, puede que tanto la tablaA
> como la tablaB no tengan registro de esa fecha así que habría que
> recoger en ese caso el inmediatamente anterior en cada una de ellas
> Tal que la select me devuelva una sóla fila con los campos de las dos filas
> encontradas en las dos tablas, algo como:
> key, id, (valor_venta / valor_compra) as margen, fecha
> La unión es sencilla con:
> Select a.key, a.id as codigo, (valor_venta /valor_compra) as margen, fecha
> from TablaA as a, TablaB as b
> where a.key=b.key
AND a.fecha <= 'fecha_parametro' AND b.fecha <= 'fecha_parametro'
ORDER BY a.fecha DESC, b.fecha DESC
LIMIT 1;

pero a partir de aquí no sé muy bien como recuperar las
> filas de la tabla A y B sabiendo que pueden no tener ningún
> registro coincidente con la fecha pasada como parámetro y teniendo que
> recuperar el más cercano a él.
>

Si entendí bien, con eso lo resuelves, aunque no creo que ese diseño
que tienes sea muy bueno. En principio, no puedes garantizar que la
consulta te retorne una sola fila (por eso el limit) y tampoco puedes
garantizar que no ingreses registros de "ventas" que no tengan ninguna
relacion con alguna "compra"

Saludos,

Juan Gabriel Romero
Colombia

--
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

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Dayrene Ronquillo Garcia 2010-03-26 18:03:28
Previous Message Juan Romero 2010-03-26 16:40:41 Re: consulta realizacion de una select