Déjame decirte lo que creo que estás preguntando.
Desea saber cómo hacer coincidir 2 columnas de fecha dentro de un rango de más o menos X número de horas.
¿Es esto correcto?
¿Están las columnas en la misma tabla de datos, o busca hacer coincidir las tablas de datos para que los datos se puedan fusionar?
Si se encuentra más de una fila dentro del rango de +/- horas, ¿desea elegir el valor más cercano? ¿Qué pasa si hay un empate?
dt = New Table( "Untitled 3",
Add Rows( 20 ),
New Column( "atime",
Numeric,
"Continuous",
Format( "ddMonyyyy h:m", 19 ),
Input Format( "ddMonyyyy h:m" ),
Formula( As Date( Random Uniform( Today() - 100000, Today() + 100000 ) ) ),
Set Display Width( 250 )
),
New Column( "closest b time",
Numeric,
"Continuous",
Format( "ddMonyyyy h:m", 19 ),
Input Format( "ddMonyyyy h:m" ),
Set Display Width( 250 )
),
New Column( "btime",
Numeric,
"Continuous",
Format( "ddMonyyyy h:m", 19 ),
Input Format( "ddMonyyyy h:m" ),
Formula( As Date( Random Uniform( Today() - 100000, Today() + 100000 ) ) ),
Set Display Width( 250 )
),
New Column( "closest a time",
Numeric,
"Continuous",
Format( "ddMonyyyy h:m", 19 ),
Input Format( "ddMonyyyy h:m" ),
Set Display Width( 250 )
)
);
dt << runformulas;
atime << deleteformula;
btime << deleteformula;
// here it is: find both backwards and forwards nearest neighbor
kdtA = KDTable( dt:atime << getvalues );
kdtB = KDTable( dt:btime << getvalues );
For( irow = 1, irow <= N Rows( dt ), irow += 1,
// look up the row of the nearest A time to this row's B time
closeA = (kdtA << knearestrows( 1, Matrix( dt:btime[irow] ) ))[1][1];
// get the actual A time from that row and keep it in this row.
dt:closest a time[irow] = dt:atime[closeA];
// flag times that are too far away
if(abs(dt:closest a time[irow]-btime[irow])>inhours(2),dt:closest a time<<COLOR cells="">inhours(2),dt:closest b time<<COLOR cells=""></COLOR></COLOR>
banderas rojas cerca de los vecinos a tiempo que tienen más de 2 horas de diferencia
el [1] [1] en la llamada de filas más extrañas obtiene el primer elemento de la lista devuelta, que es una matriz de un elemento, y luego obtiene ese elemento como un valor escalar. Es el número de fila.
Esta técnica no funcionará si necesita una ventana asimétrica (como el tiempo B debe ser dentro de 2 horas después Un momento). Puede adaptarlo obteniendo todas las filas en 2 horas, luego eligiendo la primera que funcione.