Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Error al usar limit en subconsulta - postgresql

Estas en el tema de Error al usar limit en subconsulta - postgresql en el foro de PostgreSQL en Foros del Web. Hola a todos, lo que me esta pasando es algo bien raro ya que tengo una consulta que me permite obtener el último precio de ...
  #1 (permalink)  
Antiguo 01/06/2015, 10:13
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años
Puntos: 8
Error al usar limit en subconsulta - postgresql

Hola a todos,
lo que me esta pasando es algo bien raro ya que tengo una consulta que me permite obtener el último precio de un determinado producto (tabla nota salida).
El query es el siguiente:

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
  8.                     LIMIT 1 OFFSET 0
al momento de usar este código al query principal, no me permite usar el LIMIT, no es que me muestre un error, sino que no me devuelve ningún registro.

La relación entre la consulta y la subconsulta es a través del código del producto

¿Alguna idea de lo que puede estar pasando?
De antemano muchas gracias por leer este tema.

Última edición por gnzsoloyo; 01/06/2015 a las 10:27
  #2 (permalink)  
Antiguo 01/06/2015, 10:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error al usar limit en subconsulta - postgresql

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?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 01/06/2015, 11:04
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años
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

Etiquetas: limit, subconsulta, tabla, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:05.