CREATE OR REPLACE FUNCTION system.set_sellout_average(
    date_sellout date,
    retailer integer)
  RETURNS numeric AS
$BODY$
DECLARE


BEGIN

	/*

          Lo que quiero es, que el subquery que se repite sea una variable para no tener que repetirlo

	*/

        -- Esta la tabla de venta a precio de costo
        INSERT INTO sales_cost (retailer_id,catalog_id,sellout_date,sales_avg_360)
        (
           SELECT retailer_id,catalog_id, date_sellout,SUM(sellout_cost)/360
           FROM sales  
           WHERE retailer_id = retailer
           AND catalog_id IN (
               -- Este es el query que quiero que sea una variable
               SELECT DISTINCT catalog_id FROM sales 
               WHERE sellout_date BETWEEN date_sellout - '360 days'::interval AND date_sellout
           )
           /*
             Este query lo hago para poder obtener los diferentes catalogs que han tenido registro en los ultimos 360 dias, 
             no impost si tuvieron venta o no el dia del calculo (date_sellout), porq la idea es calcular el promedio de venta 
             en ese lapso de tiempo
           */
        );
	
        -- Esta la tabla de venta a precio de venta
        INSERT INTO sales_mount (retailer_id,catalog_id,sellout_date,sales_avg_360)
        (
           SELECT retailer_id,catalog_id, date_sellout,SUM(sellout_mount)/360
           FROM sales  
           WHERE retailer_id = retailer
           AND catalog_id IN (
               -- Este es el query que quiero que sea una variable
               SELECT DISTINCT catalog_id FROM sales 
               WHERE sellout_date BETWEEN date_sellout - '360 days'::interval AND date_sellout
           )
        );

        -- Esta la tabla de venta a precio de venta + impuesto
        INSERT INTO sales_tax (retailer_id,catalog_id,sellout_date,sales_avg_360)
        (
           SELECT retailer_id,catalog_id, date_sellout,SUM(sellout_tax)/360
           FROM sales  
           WHERE retailer_id = retailer
           AND catalog_id IN (
               -- Este es el query que quiero que sea una variable
               SELECT DISTINCT catalog_id FROM sales 
               WHERE sellout_date BETWEEN date_sellout - '360 days'::interval AND date_sellout
           )
        );

	return 0;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;