Ver Mensaje Individual
  #8 (permalink)  
Antiguo 14/08/2013, 09:18
GeriReshef
 
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