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

comparar 2 registros de la misma tabla

Estas en el tema de comparar 2 registros de la misma tabla en el foro de SQL Server en Foros del Web. hola a todos, tengo una duda y quisiera saber si me pueden ayudar, resulta que necesito hacer una consulta comparando 2 registros de la misma ...
  #1 (permalink)  
Antiguo 23/03/2010, 12:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 24
Antigüedad: 15 años, 1 mes
Puntos: 0
comparar 2 registros de la misma tabla

hola a todos, tengo una duda y quisiera saber si me pueden ayudar, resulta que necesito hacer una consulta comparando 2 registros de la misma tabla pero sobre un campo en especifico, es decir la estructura de la tabla es algo asi

iduser | idmotivo | idpeticion | fecha
1 | 4 | 456 | 2010-02-02
2 | 6 | 678 | 2010-02-03
1 1 5 | 677 | 2010-01-01

un usuario puede tener varias peticiones con distinto motivo, lo que necesito es obtener las 2 mas recientes por fecha y comparar si el motivo es el mismo, y si es asi, que me devuelva un true o un false, esto por cada usuario. no se si me hago entender, y pues creo que es relevante saber que esta es una subconsulta. agradezco la colaboracion que me puedan brindar.
  #2 (permalink)  
Antiguo 23/03/2010, 14:28
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: comparar 2 registros de la misma tabla

Puedes dar un ejemplo del resultado esperado?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 23/03/2010, 14:58
 
Fecha de Ingreso: marzo-2009
Mensajes: 24
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: comparar 2 registros de la misma tabla

Hola, mira el resultado puede ser un true o un false, 1 o 0, el punto es que necesito que la consulta me arroje si son iguales o no.. no se si me entiendas, gracias
  #4 (permalink)  
Antiguo 23/03/2010, 15:07
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: comparar 2 registros de la misma tabla

Seria bueno que pongas un ejemplo tal como lo hiciste con los datos de tu tabla.
De esta manera se puede dar una mejor solucion.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 23/03/2010, 15:42
 
Fecha de Ingreso: marzo-2009
Mensajes: 24
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: comparar 2 registros de la misma tabla

Hola, mira no se como explicarte, supongamos que la consulta este dentro de un case, entonces case when (select motivo_registro1 from tabla order by fecha DESC) =(select motivo_registro2 from tabla order by fecha DESC) then true else false, donde motivo_registro1 es el motivo del primer registro de la consulta y motivo_registro2 es el motivo del segundo registro de la misma consulta, algo asi, no se si me entiendas. gracias
  #6 (permalink)  
Antiguo 23/03/2010, 17:10
 
Fecha de Ingreso: marzo-2010
Mensajes: 4
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: comparar 2 registros de la misma tabla

Esta consulta te da todos los iduser de la tabla, y el True/False que pedias:
- True si los dos ultimos registros del iduser tienen el mismo idmotivo.
- False si tienen distinto idmotivo, o si solo hay 1 registro de ese iduser.

Código:
SELECT iduser, 
	CASE WHEN COUNT(*)=2 AND COUNT(DISTINCT idmotivo)=1 THEN 'True'
	ELSE 'False' END AS UltimosRepetidos
FROM (
	SELECT * FROM tabla1 a
	WHERE idpeticion IN (SELECT TOP 2 idpeticion FROM tabla1 
		WHERE iduser=a.iduser ORDER BY fecha DESC)
) b
GROUP BY iduser;
Si es para un solo iduser le agregas un Where y listo.

Saludos.
  #7 (permalink)  
Antiguo 24/03/2010, 08:21
 
Fecha de Ingreso: marzo-2009
Mensajes: 24
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: comparar 2 registros de la misma tabla

xaloc25 Gracias!! , funciona perfectamente, te lo agradezco mucho, saludos.
  #8 (permalink)  
Antiguo 24/03/2010, 16:34
Avatar de abel_c_b  
Fecha de Ingreso: junio-2008
Mensajes: 103
Antigüedad: 15 años, 10 meses
Puntos: 1
De acuerdo Respuesta: comparar 2 registros de la misma tabla

Cita:
Iniciado por xaloc25 Ver Mensaje
Esta consulta te da todos los iduser de la tabla, y el True/False que pedias:
- True si los dos ultimos registros del iduser tienen el mismo idmotivo.
- False si tienen distinto idmotivo, o si solo hay 1 registro de ese iduser.

Código:
SELECT iduser, 
	CASE WHEN COUNT(*)=2 AND COUNT(DISTINCT idmotivo)=1 THEN 'True'
	ELSE 'False' END AS UltimosRepetidos
FROM (
	SELECT * FROM tabla1 a
	WHERE idpeticion IN (SELECT TOP 2 idpeticion FROM tabla1 
		WHERE iduser=a.iduser ORDER BY fecha DESC)
) b
GROUP BY iduser;
Si es para un solo iduser le agregas un Where y listo.

Saludos.
Hola xaloc25, podrias explicar el codigo de la consulta??

Saludos,
  #9 (permalink)  
Antiguo 26/03/2010, 15:55
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: comparar 2 registros de la misma tabla

Código SQL:
Ver original
  1. SELECT iduser,
  2. --[Paso 2] Una ves determinadas las ultimas dos peticiones del usuario,
  3. --usa este case para determinar aquellos donde el número de peticiones
  4. --sea = 2, y que el conteo distinto de las últimas dos peticiones
  5. --recuperadas sea 1 (signficaría que las últimas dos peticiones son idénticas)
  6.     CASE WHEN COUNT(*)=2 AND COUNT(DISTINCT idmotivo)=1 THEN 'True'
  7.     ELSE 'False' END AS UltimosRepetidos
  8. FROM (
  9. --[Paso 1] En la siguiente subconsulta obtiene la lista de elementos relacionados
  10. --al mismo empleado, pero solo obtiene las entradas relacionadas a las ultimas
  11. --2 peticiones del usuario... Revisa la cláusula IN
  12.     SELECT *
  13.         FROM tabla1 a
  14.     WHERE idpeticion IN (
  15.                         SELECT TOP 2 idpeticion
  16.                         FROM tabla1
  17.                 WHERE iduser=a.iduser ORDER BY fecha DESC
  18.                 )
  19. ) b
  20. GROUP BY iduser


Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....

Etiquetas: comparar, registros, tablas
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 03:02.