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

Not In Alternativas resultados erroneos

Estas en el tema de Not In Alternativas resultados erroneos en el foro de Oracle en Foros del Web. Hola buenas estoy haciendo una consulta en Oracle 9, pero no consigo obtener los resultados que estoy buscando: Tenemos dos tablas: Cliente, ImagenesContrato relacionadas por ...
  #1 (permalink)  
Antiguo 26/02/2012, 07:57
 
Fecha de Ingreso: septiembre-2008
Mensajes: 137
Antigüedad: 15 años, 7 meses
Puntos: 0
Not In Alternativas resultados erroneos

Hola buenas estoy haciendo una consulta en Oracle 9, pero no consigo obtener los resultados que estoy buscando:

Tenemos dos tablas: Cliente, ImagenesContrato relacionadas por el campo:idContrato.
La tabla Imagenes contrato contiene los movimientos realizados en un contrato desde su creacion.Yo tendria que coger la ultima fecha de actualizacion del contrato (un cliente puede tener mas de un contrato).
En resumen necesito obtener los clientes cuyo ultimo valor de sus contratos no sea 1000.
Esta es la query que estoy empleando:

select idcliente
from Cliente
where cli_idContrato not in (select distinct(idContrato) from imagenesContrato where imc_importe=1000 and (idContrato, fechaActualizacion)=
(select max(fechaActualización) from imagenesContrato group by idContrato)

El problema: Es que me esta sacando clientes con contratos cuyo importe es 1000, por ejemplo:

Cliente A tiene 5 registros en la tabla imagenesContrato:

imc_idContrato - imc_importe - imc_fechaActualizacion
1 0 20-02-2009
1 12 20-07-2009
1 0 20-10-2009
1 1000 20-12-2009

En el ejemplo arriba expuesto, no deberia de incluir ese idContrato, ya que el ultimo importe es 1000, sin embargo si que lo esta incluyendo, y ese es mi gran problema, a pesar de estar cogiendo la ultima fecha por contrato lo esta incluyendo.

Alguna ayuda por favor??
  #2 (permalink)  
Antiguo 26/02/2012, 14:25
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, 5 meses
Puntos: 2658
Respuesta: Not In Alternativas resultados erroneos

La consulta, tal como la escribes, parece tener dos errores:
- No está correctamente cerrada, porque le falta el paréntesis final (supongo que es un error de copiado).
- En la condición final de la fecha buscas aquellas fechas que combinadas con su ID sean iguales al máximo de fecha de la tabla...
Eso ultimo parece un error. NI siquiera debería funcionar.
Mira bien:

Código SQL:
Ver original
  1. SELECT idcliente
  2. FROM Cliente
  3. WHERE cli_idContrato
  4.     NOT IN  (SELECT DISTINCT (idContrato)
  5.             FROM imagenesContrato
  6.             WHERE
  7.                 imc_importe=1000
  8.                 AND (idContrato, fechaActualizacion) =
  9.                             (SELECT MAX(fechaActualización)
  10.                             FROM imagenesContrato
  11.                             GROUP BY idContrato))
__________________
¿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 27/02/2012, 04:03
 
Fecha de Ingreso: septiembre-2008
Mensajes: 137
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Not In Alternativas resultados erroneos

Perdona ese = en realidad es un IN.

Aclara algo mas?

Gracias y Saludos
  #4 (permalink)  
Antiguo 27/02/2012, 06:36
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Not In Alternativas resultados erroneos

¿ has probado con NOT EXISTS ?
  #5 (permalink)  
Antiguo 27/02/2012, 08:01
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, 5 meses
Puntos: 2658
Respuesta: Not In Alternativas resultados erroneos

Cita:
Iniciado por mariaanie Ver Mensaje
Perdona ese = en realidad es un IN.

Aclara algo mas?

Gracias y Saludos
No resuelve el problema de buscar una combinación de datos, la cual debería generar un error.
Procura algo más coherente:
Código SQL:
Ver original
  1. SELECT idcliente
  2. FROM Cliente
  3. WHERE cli_idContrato
  4.     NOT IN  (SELECT DISTINCT (idContrato)
  5.             FROM imagenesContrato
  6.             WHERE
  7.                 imc_importe=1000
  8.                 AND fechaActualizacion IN
  9.                             (SELECT MAX(fechaActualización)
  10.                             FROM imagenesContrato
  11.                             GROUP BY idContrato))
Yo también probaría:

Código SQL:
Ver original
  1. SELECT idcliente
  2. FROM Cliente
  3. WHERE cli_idContrato
  4.     NOT IN  (SELECT DISTINCT (idContrato)
  5.             FROM imagenesContrato
  6.             WHERE
  7.                 imc_importe=1000
  8.              HAVING fechaActualizacion = MAX(fechaActualización))
pero no se qué tan efectivo sea.
No he probado esa sintaxis en el contexto de Oracle.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: erroneos, resultados, select, tabla
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:58.