Skip site navigation (1) Skip section navigation (2)

[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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Marvin VillalobosDate: 2007-12-26 16:12:06
Subject: [TLM] De diagrama físico a Postgres...
Previous:From: Jesus Armando Paul CespedesDate: 2007-12-26 14:47:44
Subject: Re: backup pg_dumpall

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group