Permettez-moi de dire ce que je crois que vous demandez.
Vous voulez savoir comment faire correspondre 2 colonnes de date dans une plage de plus ou moins X heures.
Est-ce correct?
Les colonnes sont-elles dans le même tableau de données, ou cherchez-vous à faire correspondre les tableaux de données, afin que les données puissent être fusionnées ensemble?
Si plusieurs lignes se trouvent dans la plage de +/- heures, voulez-vous que la valeur la plus proche soit choisie? Et s'il y a égalité?
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>
drapeaux rouges à proximité des voisins à plus de 2 heures d'intervalle
[1] [1] dans l'appel des lignes les plus nettes obtient le premier élément de la liste renvoyée, qui est une matrice d'un élément, puis obtient cet élément sous forme de valeur scalaire. Il s'agit du numéro de ligne.
Cette technique ne fonctionnera pas si vous avez besoin d'une fenêtre asymétrique (comme le temps B doit être dans les 2 heures après Un temps). Vous pouvez l'adapter en obtenant toutes les lignes dans les 2 heures, puis en choisissant la première qui fonctionne.