Advertisement
skuda

query slower on 9.3

Jun 4th, 2014
423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. SELECT mo.referencia AS "REFERENCIA",
  2.        ent.unidades AS "ENTRADA",
  3.        ven.unidades AS "VENDIDAS",
  4.        stock.unidades AS "STOCK DISP",
  5.        stock.num_tiendas AS "TIENDAS STOCK",
  6.        CASE
  7.           WHEN ent.unidades = 0
  8.              THEN NULL
  9.           ELSE
  10.              CASE
  11.                 WHEN ((ven.unidades::numeric / ent.unidades::numeric) * 100.0)::int < 100
  12.                    THEN ((ven.unidades::numeric / ent.unidades::numeric) * 100.0)::int
  13.                 ELSE 100
  14.              END
  15.        END AS "%% VEN",
  16.        (taprov.precio * (1.0 + (mo.tipo_iva / 100.0)))::numeric(7,2) AS "COSTO IVA INC.",
  17.        ta3.precio AS "PVP RECOME.",
  18.        ta1.precio AS "PVP ACTUAL"
  19.  
  20. FROM modelo AS mo
  21.  
  22.    JOIN (SELECT mo.modelo_id AS id_modelo,
  23.                 SUM(lin.unidades_reales)::int AS unidades,
  24.                 MIN(cab.time_stamp_recepcion)::date AS min_fecha
  25.  
  26.          FROM modelo AS mo
  27.             JOIN articulo AS art ON art.id_modelo = mo.modelo_id
  28.             JOIN albaran_entrada_linea As lin ON lin.id_articulo = art.articulo_id
  29.             JOIN albaran_entrada_cabecera AS cab ON cab.albaran_id = lin.id_albaran
  30.  
  31.          WHERE cab.id_almacen_destino = 109
  32.  
  33.          GROUP BY mo.modelo_id
  34.  
  35.          HAVING MIN(cab.time_stamp_recepcion)::date = (current_date - interval '30')::date) AS ent ON ent.id_modelo = mo.modelo_id
  36.                  
  37.    JOIN (SELECT mo.modelo_id AS id_modelo,
  38.                 (CASE
  39.                    WHEN SUM(tic.unidades) > 0
  40.                       THEN  SUM(tic.unidades)
  41.                    ELSE 0
  42.                 END
  43.                 +
  44.                 CASE
  45.                    WHEN SUM(res.unidades) > 0
  46.                       THEN SUM(res.unidades)
  47.                    ELSE 0
  48.                 END)::int AS unidades
  49.          FROM modelo AS mo
  50.             JOIN articulo AS art ON art.id_modelo = mo.modelo_id
  51.  
  52.             LEFT JOIN (SELECT lin.id_articulo,
  53.                               SUM(lin.unidades) AS unidades
  54.                        FROM ticket_cabecera AS cab
  55.                           JOIN ticket_linea AS lin ON lin.id_ticket = cab.ticket_id
  56.                                                    AND lin.tienda = cab.tienda
  57.                        WHERE cab.tienda = 109
  58.                        GROUP BY lin.id_articulo) AS tic ON tic.id_articulo = art.articulo_id
  59.  
  60.             LEFT JOIN (SELECT lin.id_articulo,
  61.                               SUM(lin.unidades) AS unidades
  62.                        FROM reserva_cabecera AS cab
  63.                           JOIN reserva_linea AS lin ON lin.id_reserva = cab.reserva_id
  64.                                                     AND lin.tienda = cab.tienda
  65.                        WHERE cab.tienda = 109
  66.                           AND cab.recogido = TRUE
  67.                        GROUP BY lin.id_articulo) AS res ON res.id_articulo = art.articulo_id
  68.  
  69.        GROUP BY mo.modelo_id) AS ven ON ven.id_modelo = mo.modelo_id
  70.          
  71.    JOIN tarifa_modelo_precio AS ta3 ON ta3.id_modelo = mo.modelo_id
  72.                                    AND ta3.id_tarifa = 3
  73.    JOIN tarifa_proveedor_modelo_precio AS taprov ON taprov.id_modelo = mo.modelo_id
  74.                                                 AND taprov.id_tarifa = 3
  75.    
  76.    LEFT JOIN tarifa_modelo_precio AS ta1 ON ta1.id_modelo = mo.modelo_id
  77.                                         AND ta1.id_tarifa = 1
  78.  
  79.    LEFT JOIN (SELECT mo.modelo_id AS id_modelo,
  80.                      (SUM(st.stock) - SUM(st.reservado))::int AS unidades,
  81.                      COUNT(DISTINCT(st.tienda)) AS num_tiendas
  82.                      
  83.               FROM ubicacion_stock AS st
  84.                  JOIN articulo AS art ON art.articulo_id = st.id_articulo
  85.                  JOIN modelo AS mo ON mo.modelo_id = art.id_modelo
  86.                  
  87.               WHERE st.tienda = 109
  88.                 AND (st.stock - st.reservado) > 0
  89.               GROUP BY mo.modelo_id) AS stock ON stock.id_modelo = mo.modelo_id
  90.  
  91. WHERE mo.id_seccion <> 4
  92.   AND (ent.unidades <> 0 OR ven.unidades <> 0)
  93.  
  94. ORDER BY "REFERENCIA";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement