[TLM] Re: Vistas Materializadas Vs, Vistas Comunes

From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: Arturo Munive <arturomunive(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: [TLM] Re: Vistas Materializadas Vs, Vistas Comunes
Date: 2007-12-26 16:00:32
Message-ID: 20071226160223.D9B134142CE@qatlm3.calidad2.pandasoftware.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


--- Arturo Munive <arturomunive(at)gmail(dot)com> escribió:

>
> > Yo tengo una base en postgresql desde el 2003 con
> > movimientos de varios locales y puedo hacer la
> > consulta por local o global. Claro no exceden las
> > 300000 lineas el cabezal de los documentos y las
> > 500000 lineas los documentos, por ahora me va muy
> bien
> > con esto.
> >
> > Si tu queres me mostras la estructura yo la lleno
> y
> > hacemos alguna prueba, te parece ?
> La estructura estoy definiéndola ahora (el proyecto
> aun no lo acabo)
> pero tentativamente es esto:
>
> CREATE TABLE "public"."mov_almacen" (
> id SERIAL,
> id_producto INTEGER,
> id_almacen INTEGER,
> cantidad NUMERIC(10,3),
> fecha DATE,
> entrada BOOLEAN,
> PRIMARY KEY(id)
> ) WITHOUT OIDS;
>
> -- entrada indica si es TRUE que es ingreso al
> almacén de lo contrario
> es una salida del mismo
>
> lo que quiero es ver la cantidad de productos que
> existen actualmente en
> el almacén
>
> Una primera aproximacion sería:
>
> SELECT
> mov.id_producto,
> sum(
> case
> when not mov.entrada then (-mov.cantidad)
> else mov.cantidad end )
> FROM
> mov_almacen AS mov
> WHERE
> mov.id_almacen = 1
> GROUP BY
> mov.id_producto
>
> Donde simplemente sumo las cantidades de los
> movimientos y si son
> salidas las resto (uso su valor negativo).
>
>
> ahora bien si yo quiero saber cuanto del producto 1
> me queda en el
> almacén 3 por ejemplo tendría que recorrer toda la
> tabla sumando y
> restando para saber cuanto queda.
>
> Cual sería otra solución simple??
>
>
>
>
>

No lo hago muy diferente, pues los registros hay que
recorrerlos, pero utilizo una funcion en lenguaje sql.

CREATE OR REPLACE FUNCTION
"central"."fnc_ficha_articulo" (idart text, dfecha
date, idlocal integer) RETURNS SETOF
"central"."cficha_articulo" AS
$body$
SELECT cmovimientos_stock.id_local,
cmovimientos_stock.sucursal,
cmovimientos_stock.id_lin,
cmovimientos_stock.documento,
trim(cmovimientos_stock.empresa) as empresa,
cmovimientos_stock.serie,
cmovimientos_stock.numero,
cmovimientos_stock.fecha::date,
cmovimientos_stock.id_articulo,
cmovimientos_stock.entradas,
cmovimientos_stock.salidas
FROM central.cmovimientos_stock
WHERE cmovimientos_stock.id_articulo = $1
and CASE WHEN $3 = 0 THEN cmovimientos_stock.id_local
>= $3
ELSE cmovimientos_stock.id_local = $3 END
and
cmovimientos_stock.fecha >= $2
ORDER BY cmovimientos_stock.id_articulo,
cmovimientos_stock.fecha, cmovimientos_stock.id_lin;
$body$
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY
INVOKER;

Invoca la consulta cficha_articulos que traeria todo
los productos

Despues le paso los parametros id_articulo,fecha y
local.

No me resulta para nada lento.

Atte.
Gabriel Colina

____________________________________________________________________________________
¡Capacidad ilimitada de almacenamiento en tu correo!
No te preocupes más por el espacio de tu cuenta con Correo Yahoo!:
http://correo.espanol.yahoo.com/
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Marvin Villalobos 2007-12-26 16:12:06 De diagrama físico a Postgres...
Previous Message Jesus Armando Paul Cespedes 2007-12-26 14:47:44 Re: backup pg_dumpall