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

consulta entre dos tablas

Estas en el tema de consulta entre dos tablas en el foro de SQL Server en Foros del Web. Hola, tengo una consulta que se me resiste, seguro que no es muy dificil, pero no me sale. Tengo una tabla con los datos actuales ...
  #1 (permalink)  
Antiguo 17/04/2011, 09:49
 
Fecha de Ingreso: abril-2011
Ubicación: Madrid
Mensajes: 2
Antigüedad: 13 años
Puntos: 0
Pregunta consulta entre dos tablas

Hola, tengo una consulta que se me resiste, seguro que no es muy dificil, pero no me sale.
Tengo una tabla con los datos actuales

tabla_ahora
site_no phone1
1 333333333
2 NULL
4 6665557585


Y otra con el registro de cambios:

tabla_cambios
site_no phone1 change_date
1 111111111 14/12/2006 11:35
1 121212121 17/06/2010 11:04
1 111111111 17/06/2010 11:05
2 NULL 23/02/2004 12:06
2 666666666 13/10/2005 9:32
2 NULL 12/01/2011 19:17
4 6665557585 17/03/2004 3:56


Por un problema, los últimos cambios no han dejado registro en la tabla_cambios.

Me gustaría comparar el telefono de la tabla_ahora con el teléfono de la tabla_cambios que tenga la fecha más reciente y mostrar sólo los que sean distintos:
site_no, tabla_ahora.phone1, tabla_cambios.phone1, change_date

el JOIN se haría por site_no

MUCHAS GRACIAS
  #2 (permalink)  
Antiguo 18/04/2011, 02:43
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: consulta entre dos tablas

¿Que query tienes y que es lo que no sabes hacer?
  #3 (permalink)  
Antiguo 19/04/2011, 08:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: consulta entre dos tablas

Hola franfjmu:

La idea del foro no es hacer el trabajo de otros, sino ayudar con las dudas concretas que tienen los foristas. Es por eso que el compañero Heimish2000 te pide que nos pongas algo del código que llevas, para ayudarte a afinarlo. En tu post no mencionas qué problema es el que tienes, cosa que complica aun más el poder ayudarte. Ojo con eso.

Creo que la parte que más se te puede complicar es obtener el último registro para cada site_no, checa este código

Código SQL:
Ver original
  1. DECLARE @tabla_cambios TABLE (site_no INT, phone1 VARCHAR(15), change_date datetime)
  2. INSERT INTO @tabla_cambios VALUES (1, '111111111', '2006-12-14 11:35')
  3. INSERT INTO @tabla_cambios VALUES (1, '121212121', '2010-06-17 11:04')
  4. INSERT INTO @tabla_cambios VALUES (1, '111111111', '2010-06-17 11:05')
  5. INSERT INTO @tabla_cambios VALUES (2, 'NULL', '2004-02-23 12:06')
  6. INSERT INTO @tabla_cambios VALUES (2, '666666666', '2005-10-13 9:32')
  7. INSERT INTO @tabla_cambios VALUES (2, 'NULL',    '2011-01-12 19:17')
  8. INSERT INTO @tabla_cambios VALUES (4, '6665557585',  '2004-03-17 3:56')
  9. SELECT * FROM @tabla_cambios
  10.  
  11. SELECT T1.* FROM @tabla_cambios T1 INNER JOIN
  12. (
  13. SELECT site_no, MAX(change_date) max_change_date FROM
  14. @tabla_cambios GROUP BY site_no
  15. ) T2 ON T1.site_no = T2.site_no AND T1.change_date = T2.max_change_date

Con esto obtienes lo siquiente:

Código:
site_no|phone1|change_date
-------------------------------------------
1|111111111|2010-06-17 11:05:00.000
2|NULL|2011-01-12 19:17:00.000
4|6665557585|2004-03-17 03:56:00.000
Ahora lo que te toca hacer a tí es la unión con tu tabla_ahora para obtener aquellos donde los teléfonos no coincidan, espero que eso no te cueste mucho, al menos haz el intento por hacerlo y si tienes problemas lo comentas en el foro, postea algo de código y te ayudamos a afinarlo.

Saludos
Leo.
  #4 (permalink)  
Antiguo 19/04/2011, 13:52
 
Fecha de Ingreso: abril-2011
Ubicación: Madrid
Mensajes: 2
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta entre dos tablas

Lo primero, gracias Leo

Todavía no se me da bien las consultas de una tabla consigo misma. Lo que yo había probado me sacaba un registro por cada phone1:

SELECT T1.site_no,T1.phone1, MAX (T1.change_date)as fecha_ult_cambio
FROM site_archive T1
WHERE T1.site_no<'100' --filtro para hacer una prueba rápida
GROUP BY T1.site_no, T1.phone1


Ahora gracias a tu colaboración, creo que ya me sale:

SELECT T3.phone1 telf_actual, T1.site_no, T1.phone1, max_change_date FROM site_archive T1 INNER JOIN
(
SELECT site_no, max(change_date) max_change_date FROM
site_archive GROUP BY site_no
) T2 ON T1.site_no = T2.site_no AND T1.change_date = T2.max_change_date, site T3
WHERE T1.site_no<'100'--filtro para hacer una prueba rápida
AND T1.site_no=T3.site_no
AND T1.phone1 <>T3.phone1


Voy a tener que practicar más consultas de este estilo...

Un saludo
  #5 (permalink)  
Antiguo 19/04/2011, 14:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: consulta entre dos tablas

Hola de nuevo franfjmu:

Creo que la consulta que pones es correcta, pero no te recomiendo que hagas este tipo de unión entre tablas

Código:
FROM Tabla1, Tabla2 WHERE Tabla1.CampoID = Tabla2.CampoID
Lo más convenientes es que SIEMPRE UTILICES JOIN para hacer las uniones. La consulta quedaría más o menos asi:
Código:
SELECT T3.phone1 telf_actual, T1.site_no, T1.phone1, max_change_date FROM site_archive T1 INNER JOIN
(
SELECT site_no, max(change_date) max_change_date FROM
site_archive GROUP BY site_no
) T2 ON T1.site_no = T2.site_no AND T1.change_date = T2.max_change_date 
INNER JOIN site T3
ON T1.site_no = T3.site_no
WHERE T1.site_no<'100'--filtro para hacer una prueba rápida
AND T1.phone1 <>T3.phone1
En estos momentos no tengo forma de probar la consulta, pero el resultado debería de ser el mismo. Y como dices, la única forma de aprender a hacer consultas elaboradas el estudiando y practicando.

Saludos
Leo.

Etiquetas: 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 04:34.