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

Consulta duplicados

Estas en el tema de Consulta duplicados en el foro de Bases de Datos General en Foros del Web. Hola, Tengo una tabla "evaluar" con los campos: id_evaluacion, login, id_metodo, fecha Necesito obtener los id_evaluacion de cada usuario cuyo método utilizado haya sido el ...
  #1 (permalink)  
Antiguo 14/12/2010, 13:33
 
Fecha de Ingreso: noviembre-2006
Mensajes: 82
Antigüedad: 17 años, 5 meses
Puntos: 0
Consulta duplicados

Hola,

Tengo una tabla "evaluar" con los campos: id_evaluacion, login, id_metodo, fecha

Necesito obtener los id_evaluacion de cada usuario cuyo método utilizado haya sido el 1.
Pero puede haber usuarios que hayan evaluado varias veces, entonces en ese caso debería obtener sólo el id_evaluacion de la evaluacion más reciente.

Mi consulta es:
SELECT idevaluacion, login, fecha FROM evaluar WHERE url = 'http://sitio.com' AND idmetodo =1

pero muestra lo siguiente:

id login fecha
1 luis 2010-12-01
2 jose 2010-12-13
3 luis 2010-12-13

Lo que debería mostrar es:

id login fecha
2 jose 2010-12-13
3 luis 2010-12-13

ya que "luis" está repetido y quiero quedarme con el más reciente (el de fecha 2010-12-13)

Cómo podría conseguirlo?
  #2 (permalink)  
Antiguo 14/12/2010, 14:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta duplicados

Código SQL:
Ver original
  1. SELECT * FROM
  2. (
  3. SELECT
  4. ROW_NUMBER () OVER ( PARTITION BY idevaluacion,fecha ORDER BY idevaluacion,fecha ASC) AS RN, idevaluacion, login, fecha
  5. FROM evaluar WHERE url = 'http://sitio.com' AND idmetodo =1
  6. ) t1 WHERE rn=1
Puedes probar asi :)

Saludos!
  #3 (permalink)  
Antiguo 14/12/2010, 14:24
 
Fecha de Ingreso: noviembre-2006
Mensajes: 82
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Consulta duplicados

Hola,

he probado pero me da un error (uso mysql)

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( PARTITION BY idevaluacion , fecha ORDER BY idevaluacion , fecha ASC ) AS RN , ' at line 1
  #4 (permalink)  
Antiguo 14/12/2010, 15:06
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta duplicados

Sorry pero la funcion que puse es para SQL server 2005 :S, como no decias la version de tu manejador de base de datos :S

Podrias hacerlo asi:

Código SQL:
Ver original
  1. SELECT DISTINCT id, login, fecha  
  2. FROM #temp
  3. GROUP BY id, login, fecha
  4. ORDER BY fecha DESC

y nada mas presentar los primeros resultados......

La otra es que cambies tu estructura, en lugar de meter una evaluacion por cada usuario tener por ejemplo una tabla de evaluaciones nada mas con el id_usuario y fecha evaluacion, asi nada mas sacarias la ultima evaluacion que ha echo un usuario

Saludos!
  #5 (permalink)  
Antiguo 14/12/2010, 15:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Consulta duplicados

Buenos días Tram...

supongo que id e idevaluacion se refieren al mismo campo, así es que puedes probar con lo siquiente.


Código MySQL:
Ver original
  1. SELECT id, T1.login, fecha
  2. FROM evaluar T1
  3. (
  4. SELECT login, max(fecha) as max_fecha
  5. FROM evaluar WHERE url = 'http://sitio.com' AND idmetodo = 1
  6. GROUP BY login
  7. ) T2 on T1.login = T2.login and T1.fecha = T2.max_fecha
  8. WHERE T1.url = 'http://sitio.com' AND T1.idmetodo = 1

Saludos
Leo.
  #6 (permalink)  
Antiguo 14/12/2010, 15:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta duplicados

Cita:
Iniciado por leonardo_josue Ver Mensaje
Buenos días Tram...

supongo que id e idevaluacion se refieren al mismo campo, así es que puedes probar con lo siquiente.


Código MySQL:
Ver original
  1. SELECT id, T1.login, fecha
  2. FROM evaluar T1
  3. (
  4. SELECT login, max(fecha) as max_fecha
  5. FROM evaluar WHERE url = 'http://sitio.com' AND idmetodo = 1
  6. GROUP BY login
  7. ) T2 on T1.login = T2.login and T1.fecha = T2.max_fecha
  8. WHERE T1.url = 'http://sitio.com' AND T1.idmetodo = 1

Saludos
Leo.
Excelente Respuesta!!!
  #7 (permalink)  
Antiguo 14/12/2010, 16:55
 
Fecha de Ingreso: noviembre-2006
Mensajes: 82
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Consulta duplicados

perfecto!!!
gracias a los dos!
  #8 (permalink)  
Antiguo 15/12/2010, 04:51
 
Fecha de Ingreso: noviembre-2006
Mensajes: 82
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Consulta duplicados

Otra pregunta,
yo tengo la fecha en formato 2010-12-15
con esa consulta, consigo lo que quería, que en el caso de 2 logins iguales, me muestre el de fecha más reciente.
en el caso de que hubiera 2 logins con la misma fecha, me gustaría que mostrara como más reciente, aquel que tenga la hora más reciente.
por lo tanto me gustaría añadir a la fecha las horas y minutos. Cómo podría hacerlo?
He puesto $fecha = date("Y-m-d G:i"); pero en la base de datos sólo me guarda Y-m-d
Y luego aparte, esa consulta funcionaría igual al añadirle las horas y minutos?

Última edición por Tram; 15/12/2010 a las 08:06
  #9 (permalink)  
Antiguo 15/12/2010, 08:16
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: Consulta duplicados

Tienes el campo definido como DATE. Para almacenar la hora debes usar DATETIME. SI no quieres modificar el campo, le puedes añadir otro para la hora de tipo TIME, peor eso requeriría modificar todos los INSERT y UPDATES que afecten a la tabla.
__________________
¿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: duplicados
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 14:57.