Tu consulta esta toda desordenada, ahí esta tu error, el group by esta antes del from ... etc ...
Saludos.
Saludos.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúSELECT T1.*, TMP.fecha
FROM T1 LEFT OUTER JOIN (SELECT T2.id_t1, MAX(T2.fecha) AS fecha FROM T2 GROUP BY id_t1) TMP ON ( T1.id = TMP.id_t1 )
WHERE T1.... /* condiciones */
CREATE OR REPLACE FUNCTION tr_stock_articulo_almacen()
RETURNS trigger AS
$BODY$
DECLARE i_existe integer;
i_tipo integer;
BEGIN
-- Calcula valores
i_tipo := (CASE WHEN TG_TABLE_NAME = 'tb_venta_detalle' THEN -1 ELSE 1 END);
i_existe := (SELECT COUNT(id) FROM tb_stock WHERE idalmacen = NEW.idalmacen AND idarticulo = NEW.idarticulo);
-- Inserta almacen y producto en tabla stock
IF i_existe = 0 THEN
INSERT INTO tb_stock (idalmacen, idarticulo, cantidad) VALUES (NEW.idalmacen, NEW.idarticulo, 0);
END IF;
-- Opera trigger
IF TG_OP = 'INSERT' THEN
UPDATE tb_stock SET cantidad = cantidad + (NEW.cantidad * i_tipo) WHERE idalmacen = NEW.idalmacen AND idarticulo = NEW.idarticulo;
ELSEIF TG_OP = 'UPDATE' THEN
UPDATE tb_stock SET cantidad = cantidad - (OLD.cantidad * i_tipo) WHERE idalmacen = OLD.idalmacen AND idarticulo = OLD.idarticulo;
UPDATE tb_stock SET cantidad = cantidad + (NEW.cantidad * i_tipo) WHERE idalmacen = NEW.idalmacen AND idarticulo = NEW.idarticulo;
ELSEIF TG_OP = 'DELETE' THEN
UPDATE tb_stock SET cantidad = cantidad - (OLD.cantidad * OLD.tipo) WHERE idalmacen = OLD.idalmacen AND idarticulo = OLD.idarticulo;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
-- Para la tabla de detalle de compra
CREATE TRIGGER tb_compra_detalle_trigger
AFTER INSERT OR UPDATE OR DELETE
ON tb_compra_detalle
FOR EACH ROW
EXECUTE PROCEDURE tr_stock_articulo_almacen();
-- Para la tabla de detalle de venta
CREATE TRIGGER tb_venta_detalle_trigger
AFTER INSERT OR UPDATE OR DELETE
ON tb_venta_detalle
FOR EACH ROW
EXECUTE PROCEDURE tr_stock_articulo_almacen();