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

[SOLUCIONADO] relacionar 2 tablas tomando en cuenta rangos de hora

Estas en el tema de relacionar 2 tablas tomando en cuenta rangos de hora en el foro de SQL Server en Foros del Web. Hola, soy nuevo en el foro y tambien en la programacion con sql; me he topado con lo siguiente: tengo 2 tablas: Llamadas_Totales[Inicio_llamada,fin_llamada,anexo,numero_llamado] y Conexion_Desconexion[hora_conexion,anexo,agente,hora_desconexion] ...
  #1 (permalink)  
Antiguo 08/02/2014, 10:38
 
Fecha de Ingreso: febrero-2014
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
relacionar 2 tablas tomando en cuenta rangos de hora

Hola, soy nuevo en el foro y tambien en la programacion con sql; me he topado con lo siguiente:

tengo 2 tablas: Llamadas_Totales[Inicio_llamada,fin_llamada,anexo,numero_llamado] y Conexion_Desconexion[hora_conexion,anexo,agente,hora_desconexion]
y quiero relacionarlas mediante un join u otra forma mediante el campo anexo, pero tomando en cuenta que el campo Inicio_llamada se encuentra entre
hora de conexion y desconexion (que se encuentre en ese rango de tiempo)
y si no se encuentra entre ese rango obviamente que no lo relacione pero que si me lo muestre en la consulta. El detalle tambien esta
en que hay mas una hora_conexion y hora_desconexion (varias filas) y la idea es que compare todos esos rangos. Alguna idea?
  #2 (permalink)  
Antiguo 08/02/2014, 20: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: relacionar 2 tablas tomando en cuenta rangos de hora

???? pon un ejemplo de los datos y que es lo que quieres obtener porque la verrdad no te entiendo nada......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 10/02/2014, 10:56
 
Fecha de Ingreso: febrero-2014
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: relacionar 2 tablas tomando en cuenta rangos de hora

ok.

En mi tabla Llamadas_Totales tengo los siguientes datos:

inicio_llamad fin_llamad Anexo numerotelefonicollamado
----------------------- ----------------------- --------------------------- --------------------------
2014-01-31 11:26:17.663 2014-01-31 11:26:29.847 11097 11092
2014-01-31 11:11:58.903 2014-01-31 11:14:50.553 11097 11019
2014-01-31 10:59:01.823 2014-01-31 11:00:34.483 11097 25998
2014-01-30 16:28:47.083 2014-01-30 16:28:49.407 11097 9989140938
2014-01-30 16:19:11.613 2014-01-30 16:19:17.260 11097 9989140938
2014-01-30 16:16:42.070 2014-01-30 16:16:45.563 11097 11091
2014-01-30 14:52:54.073 2014-01-30 14:54:20.437 11097 2083
2014-01-30 00:15:41.147 2014-01-30 00:18:14.427 11097 989140938
2014-01-30 00:14:15.060 2014-01-30 00:14:29.230 11097 9989140938
2014-01-30 00:12:36.030 2014-01-30 00:13:50.370 11097 989140938
2014-01-30 00:11:34.233 2014-01-30 00:11:40.553 11097 989140938
2014-01-30 00:02:20.510 2014-01-30 00:11:15.950 11097 9989140938


y mi otra tabla Conexion_Desconexion:

Agente Anexo Hora_Conexion Hora_Desconexion
208 11097 2014-01-29 23:55:08.015 2014-01-30 01:03:33.948
208 11097 2014-01-30 16:18:42.562 2014-01-30 16:28:00.527
208 11097 2014-02-01 16:43:51.727 2014-02-01 16:44:28.262
208 11097 2014-01-30 16:34:11.104 2014-01-30 16:53:21.482
208 11097 2014-01-30 17:07:39.587 2014-01-30 17:36:29.158

La idea es saber si las llamadas las realiza conectado al sistema o no; es decir tomando en cuenta todos los rangos de conexion y desconexion. Por ejemplo al analizar todos los registros de la tabla 1 y comparar con la tabala 2 para ver si estuvo conectado o no conectado al sistema obtenemos:

Registro1: llamada se realizo no conectado al sistema.
Registro2: llamada se realizo no conectado al sistema.
Registro3: llamada se realizo no conectado al sistema.
Registro4: llamada se realizo no conectado al sistema.
Registro5: llamada se realizo conectado al sistema.
Registro6: llamada se realizo no conectado al sistema.
Registro7: llamada se realizo no conectado al sistema.
Registro8: llamada se realizo conectado al sistema.
Registro9: llamada se realizo conectado al sistema.
Registro10: llamada se realizo conectado al sistema.
Registro11: llamada se realizo conectado al sistema.
Registro12: llamada se realizo conectado al sistema.

La idea es hacer un reporte o una vista en donde me muestre lo siguiente:

inicio_llamada, fin_llamada, anexo , Agente, numerotelefonicollamado, Conexion

En donde los Campos Agente y Conexion tomaran el valor 208 (como en la muestra) y 'Conectado al Sistema', respectivamente, si la llamada se realizo cuando estuvo conectado (entre la hora_conexion y la hora_desconexion) y si la llamada se realiza fuera de esos rangos entonces el campo Agente tomara el valor de null y el de Conexion sera 'Desconectado del Sistema'.
  #4 (permalink)  
Antiguo 11/02/2014, 09:32
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: relacionar 2 tablas tomando en cuenta rangos de hora

tomando en cuenta los datos que posteaste, quedaria algo asi :)

Código SQL:
Ver original
  1. CREATE TABLE #llamadas_totales
  2. (
  3. inicio datetime,
  4. fin datetime,
  5. anexo INT,
  6. numero VARCHAR(20)
  7. )
  8.  
  9.  
  10. INSERT INTO #llamadas_totales VALUES ('2014-01-31 11:26:17.663','2014-01-31 11:26:29.847',11097,'11092')
  11. INSERT INTO #llamadas_totales VALUES ('2014-01-31 11:11:58.903','2014-01-31 11:14:50.553',11097, '11019')
  12. INSERT INTO #llamadas_totales VALUES ('2014-01-31 10:59:01.823','2014-01-31 11:00:34.483',11097, '25998')
  13. INSERT INTO #llamadas_totales VALUES ('2014-01-30 16:28:47.083','2014-01-30 16:28:49.407',11097, '9989140938')
  14. INSERT INTO #llamadas_totales VALUES ('2014-01-30 16:19:11.613','2014-01-30 16:19:17.260',11097, '9989140938')
  15. INSERT INTO #llamadas_totales VALUES ('2014-01-30 16:16:42.070','2014-01-30 16:16:45.563',11097 ,'11091')
  16. INSERT INTO #llamadas_totales VALUES ('2014-01-30 14:52:54.073','2014-01-30 14:54:20.437',11097, '2083')
  17. INSERT INTO #llamadas_totales VALUES ('2014-01-30 00:15:41.147','2014-01-30 00:18:14.427',11097, '989140938')
  18. INSERT INTO #llamadas_totales VALUES ('2014-01-30 00:14:15.060','2014-01-30 00:14:29.230',11097, '9989140938')
  19. INSERT INTO #llamadas_totales VALUES ('2014-01-30 00:12:36.030','2014-01-30 00:13:50.370',11097, '989140938')
  20. INSERT INTO #llamadas_totales VALUES ('2014-01-30 00:11:34.233','2014-01-30 00:11:40.553',11097, '989140938')
  21. INSERT INTO #llamadas_totales VALUES ('2014-01-30 00:02:20.510','2014-01-30 00:11:15.950',11097, '9989140938')
  22.  
  23. CREATE TABLE #conexion
  24. (
  25. agente INT,
  26. anexo INT,
  27. hora_conexion datetime,
  28. hora_desconexion datetime
  29. )
  30.  
  31. INSERT INTO #conexion VALUES (208,11097,'2014-01-29 23:55:08.015','2014-01-30 01:03:33.948')
  32. INSERT INTO #conexion VALUES (208,11097,'2014-01-30 16:18:42.562','2014-01-30 16:28:00.527')
  33. INSERT INTO #conexion VALUES (208,11097,'2014-02-01 16:43:51.727','2014-02-01 16:44:28.262')
  34. INSERT INTO #conexion VALUES (208,11097,'2014-01-30 16:34:11.104','2014-01-30 16:53:21.482')
  35. INSERT INTO #conexion VALUES (208,11097,'2014-01-30 17:07:39.587','2014-01-30 17:36:29.158')
  36.  
  37.  
  38.  
  39.  
  40. SELECT isnull(t3.calculado,'llamada se realizo no conectado al sistema') AS calculado,isnull(t3.inicio,t4.inicio) AS inicio, isnull(t3.fin,t4.fin) AS fin,isnull(t3.anexo,t4.anexo) AS anexo, isnull(t3.numero,t4.numero) AS numero,t3.agente FROM(
  41. SELECT * FROM(
  42. SELECT
  43. CASE
  44. WHEN inicio BETWEEN hora_conexion AND hora_desconexion THEN 'llamada se realizo conectado al sistema' ELSE 'llamada se realizo no conectado al sistema' END AS calculado,inicio,fin,t1.anexo,t1.numero,t2.agente
  45.  FROM #llamadas_totales AS t1
  46. LEFT JOIN #conexion AS t2 ON (t1.anexo=t2.anexo)
  47. ) completa WHERE calculado='llamada se realizo conectado al sistema'
  48. ) AS t3
  49. RIGHT JOIN #llamadas_totales AS t4 ON (t3.inicio=t4.inicio)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 12/02/2014, 23:19
 
Fecha de Ingreso: febrero-2014
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: relacionar 2 tablas tomando en cuenta rangos de hora

Muchas Gracias por la ayuda, voy a probar el query.

Saludos..

Etiquetas: campo, rangos, relacionar, siguiente, sql, tabla, 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 01:01.