Ver Mensaje Individual
  #3 (permalink)  
Antiguo 01/06/2015, 11:04
oggy_15_3
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Error al usar limit en subconsulta - postgresql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
OK, ¿y qué pasa si sólo pones así:
Código SQL:
Ver original
  1. SELECT xnsd.num_guia,xnsd.cdg_prod,xns.fec_guia,xnsd.pre_guia
  2.  FROM m_guia xns
  3. INNER JOIN d_guia xnsd ON (xnsd.num_guia=xns.num_guia AND xnsd.cdg_tpg=xns.cdg_tpg)
  4. INNER JOIN t_cambio xtcmb ON (xtcmb.fec_cmb=xns.fec_guia)
  5. WHERE xns.cdg_tpg='002'
  6.     AND cdg_prod='0100400078'
  7. ORDER BY xnsd.num_guia DESC,xns.fec_guia DESC
¿Devuelve algo?
Hola, gracias por el interés en el tema.
Sí, si quito el LIMIT me devuelve varios registros en orden descendente.
Creo estar acercándome al problema, lo que pasa es que la subconsulta funciona
cuando uso dentro de ella la condición cdg_prod='0100400078',
pero cuando la quito y aplico la condicional al query principal
esta no me muestra ningún registro.
Y eso lo hace aún más raro XD.

Este es el query final (reducido porque tengo varias tablas involucradas).

Código SQL:
Ver original
  1. SELECT nsd.num_guia,nsd.cdg_prod
  2. FROM d_guia nsd
  3. INNER JOIN
  4. (SELECT xnsd.num_guia,xnsd.cdg_prod,xns.fec_guia,xnsd.pre_guia,xtcmb.tip_cmb,
  5.         ROUND((CASE xns.cdg_mon WHEN '001' THEN xnsd.pre_guia ELSE
  6.         (CASE '001' WHEN '002' THEN xnsd.pre_guia/xtcmb.tip_cmb ELSE xnsd.pre_guia*xtcmb.tip_cmb END)END)::NUMERIC,4)AS costo_prom
  7.         FROM m_guia xns
  8.         INNER JOIN d_guia xnsd ON (xnsd.num_guia=xns.num_guia AND xnsd.cdg_tpg=xns.cdg_tpg)
  9.         INNER JOIN t_cambio xtcmb ON (xtcmb.fec_cmb=xns.fec_guia)
  10.     WHERE xns.cdg_tpg='002'
  11.     --AND cdg_prod='0100400052'
  12.     ORDER BY xnsd.num_guia DESC,xns.fec_guia DESC
  13.     LIMIT 1 OFFSET 0)xnsd ON xnsd.cdg_prod=nsd.cdg_prod
  14. WHERE nsd.cdg_prod='0100400052'
  15. LIMIT 100 OFFSET 0

Si habilito la condicional de la subconsulta recién ahí me muestra los resultados, pero esa no es la idea ya que el query principal tiene distintos productos (consulta dinámica) y no puedo manejar los productos de forma estática.
Intenté usar nsd.cdg_prod='0100400052' dentro de la subconsulta, pero no funciona porque no se puede usar variables de una consulta superior a una inferior, ¿cierto?. Creo que no me queda más que crear un procedimiento almacenado o una vista. ¿Cuál sería mejor?

Última edición por gnzsoloyo; 01/06/2015 a las 13:01