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

Cruzar Registros por Fecha

Estas en el tema de Cruzar Registros por Fecha en el foro de SQL Server en Foros del Web. Estimados: buenas tardes, tengo un ligero problema y espero me puedan ayudar: sucede que tengo 2 tablas que tiene un campo fecha bajo el siguiente ...
  #1 (permalink)  
Antiguo 13/08/2013, 15:31
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 9 meses
Puntos: 5
Pregunta Cruzar Registros por Fecha

Estimados: buenas tardes, tengo un ligero problema y espero me puedan ayudar:

sucede que tengo 2 tablas que tiene un campo fecha bajo el siguiente formato:2013-08-08 18:34:37.000, y estoy haciendo un cruce entre ambas, sucede que cuando igualo ambos campos solo me muestran pocos registros, pero si comparo tomando en cuenta el dia, mes y año, me muestran mas registros(obviando la hora). la pregunta seria, hay alguna forma de comparar las horas entre ambos campos...? o necesariamente tengo que igualar ambos campos en mi consulta sin separar los valores....??
  #2 (permalink)  
Antiguo 13/08/2013, 16:22
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Cruzar Registros por Fecha

Intenta asi:
Código SQL:
Ver original
  1. SELECT *
  2. FROM Tabla1
  3. INNER JOIN Tabla2
  4.       ON DateDiff(DAY,Tabla1.Fecha1,Tabla2.Fecha2)=0;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 13/08/2013, 16:45
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 9 meses
Puntos: 5
Respuesta: Cruzar Registros por Fecha

lo estoy ejecutando, pero me muestra error de desbordamiento aritmetico....
  #4 (permalink)  
Antiguo 13/08/2013, 16:50
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 9 meses
Puntos: 5
Respuesta: Cruzar Registros por Fecha

perdon, ya salio.....estaba ejecutando un campo que no era.....gracias.....y al parecer si esta correcto....
  #5 (permalink)  
Antiguo 13/08/2013, 17:04
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 9 meses
Puntos: 5
Respuesta: Cruzar Registros por Fecha

correccion @GeriReshef, estuve revisando, pero al parecer los registros estan duplicandose....en el tema de la hora, adjunto un ejemplo:
HORA_INICIO HORA_FIN PERSONAL
03/08/2013 09:30:38 a.m. 03/08/2013 09:30:50 a.m. JARA VILLAVICENCIO JAKELIN
03/08/2013 09:30:38 a.m. 03/08/2013 09:30:50 a.m. HIDALGO HUAMAN OLIVER
03/08/2013 09:30:38 a.m. 03/08/2013 09:30:50 a.m. CCENTE CHANCASANAMPA JONATHAN
  #6 (permalink)  
Antiguo 13/08/2013, 21:21
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Cruzar Registros por Fecha

1. Cual es el tipo de datos de las columnas HORA_INICIO, HORA_FIN?
De tu ejemplo sospecho que no es DateTime?

2. Buscas coincidencias de registros del mismo dia?
(Por ejemplo 13/08/2013 13:00 y 13/08/2013 22:45)

3. Aparte de las fechas, hay otras columnas en comun? (Por ejemplo: ID)
Cual es la clave primaria?
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #7 (permalink)  
Antiguo 14/08/2013, 07:24
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 9 meses
Puntos: 5
Respuesta: Cruzar Registros por Fecha

@GeriReshef, las respuestas a tus consultas
1. El tipo de dato de ambos si es datetime.
2. Efectivamente, lo que busco son registros que tengan coincidencia el mismo dia.
3. y si, hay mas de 1 columna en comun(Grupo, Telefono), y pues la PK es telefono en ambos casos......
  #8 (permalink)  
Antiguo 14/08/2013, 09:18
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Cruzar Registros por Fecha

Me parece que entiendo cual es el problema-
en caso que tienes 3 filas del 03/08/2013 (distintas horas) en una tabla
y 5 filas del 03/08/2013 en la otra
quieres obtener 5 filas de esta fecha (3 con fechas de ambas tablas y 2 con fechas de la segunda)
y lo que obtenes son 3*5=15 filas.

Si este es el problema, la solución puede ser así (te adjunto un ejemplo y tendras que cambiar los nombres de las tablas y de las columnas y supongo que utilizas la versión 2005 o más alta):
Código SQL:
Ver original
  1. CREATE TABLE #T1(Fecha DateTime);
  2. INSERT INTO #T1 SELECT '20130101 10:00';
  3. INSERT INTO #T1 SELECT '20130101 13:00';
  4. INSERT INTO #T1 SELECT '20130102 09:00';
  5. INSERT INTO #T1 SELECT '20130103 12:00';
  6. INSERT INTO #T1 SELECT '20130103 20:00';
  7.  
  8. CREATE TABLE #T2(Fecha DateTime);
  9. INSERT INTO #T2 SELECT '20130101 19:00';
  10. INSERT INTO #T2 SELECT '20130102 01:00';
  11. INSERT INTO #T2 SELECT '20130102 09:00';
  12. INSERT INTO #T2 SELECT '20130102 19:00';
  13. INSERT INTO #T2 SELECT '20130104 17:00';
  14.  
  15. WITH T1 AS
  16. (SELECT ROW_NUMBER() OVER(Partition BY DateAdd(DAY,DateDiff(DAY,0,Fecha),0) ORDER BY Fecha) Nm,
  17.         *
  18. FROM    #T1
  19. WHERE   EXISTS (SELECT  1
  20.                 FROM    #T2
  21.                 WHERE   DateDiff(DAY,#T1.Fecha,#T2.Fecha)=0)),
  22. T2 AS
  23. (SELECT ROW_NUMBER() OVER(Partition BY DateAdd(DAY,DateDiff(DAY,0,Fecha),0) ORDER BY Fecha) Nm,
  24.         *
  25. FROM    #T2
  26. WHERE   EXISTS (SELECT  1
  27.                 FROM    #T1
  28.                 WHERE   DateDiff(DAY,#T1.Fecha,#T2.Fecha)=0))
  29. SELECT  *
  30. FROM    T1
  31. FULL OUTER JOIN T2
  32.         ON DateDiff(DAY,T1.Fecha,T2.Fecha)=0
  33.         AND T1.Nm=T2.Nm;

No estoy seguro que esta solución es la más eficaz,
y de hecho - con tablas grandes el rendimiento sera muy bajo aun tengas indexes en la columna fecha.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Etiquetas: fecha, registro, registros, tabla, valor
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 22:55.