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 <[email protected]>:
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: [email protected]


--
TIP 2: puedes desuscribirte de todas las listas simultáneamente
   (envía "unregister TuDirecciónDeCorreo" a [email protected])

Responder a