Salut tout le monde!
J'ai un problème où j'ai le tableau de données 1 comme indiqué ci-dessous avec une colonne d'horodatage et diverses colonnes de données
| Horodatage | Colonne A | Colonne B |
| 08/02/2021 11h45 | A1 | B1 |
| 08/02/2021 13:39 | A2 | B2 |
| 08/02/2021 23:37 | A3 | B3 |
| 13/02/2021 00h01 | A4 | B4 |
| 13/02/2021 16h00 | A5 | B5 |
| 13/02/2021 22:22 | A6 | B6 |
| 18/02/2021 9h00 | A7 | B7 |
| 18/02/2021 12:01 | A8 | B8 |
| 21/02/2021 9h15 | A9 | B9 |
| 21/02/2021 11h50 | A10 | B10 |
| 21/02/2021 15h00 | A11 | B11 |
Et le tableau de données 2 également avec une colonne d'horodatage et les colonnes de données correspondantes
| Horodatage | Colonne C | Colonne D |
| 08/02/2021 11:24 | C1 | D1 |
| 13/02/2021 00h07 | C2 | D2 |
| 18/02/2021 10h29 | C3 | D3 |
| 21/02/2021 11h16 | C4 | D4 |
Je voudrais joindre ces deux tables de données ensemble où je conserve la colonne d'horodatage du tableau de données 1, mais joindre les colonnes C et D du tableau de données 2 dans le tableau de données 1 où les données sont appliquées à partir de l'heure indiquée dans l'horodatage dans Données. Tableau 2.La colonne résultante ressemblerait à ceci :
| Horodatage | Colonne A | Colonne B | Colonne C | Colonne D |
| 08/02/2021 11h45 | A1 | B1 | C1 | D1 |
| 08/02/2021 13:39 | A2 | B2 | C1 | D1 |
| 08/02/2021 23:37 | A3 | B3 | C1 | D1 |
| 13/02/2021 00h01 | A4 | B4 | C1 | D1 |
| 13/02/2021 16h00 | A5 | B5 | C2 | D2 |
| 13/02/2021 22:22 | A6 | B6 | C2 | D2 |
| 18/02/2021 9h00 | A7 | B7 | C2 | D2 |
| 18/02/2021 12:01 | A8 | B8 | C3 | D3 |
| 21/02/2021 9h15 | A9 | B9 | C3 | D3 |
| 21/02/2021 11h50 | A10 | B10 | C4 | D4 |
| 21/02/2021 15h00 | A11 | B11 | C4 | D4 |
Merci d'avance pour votre aide!
Bien sur tu as raison @txnelson . J'ai juste regardé trop vite. J'ai modifié ma réponse originale.
@Dan_Obermiller
2 des lignes ne correspondent pas en fonction de la date.La correspondance du tableau présentée semble être basée sur la date antérieure la plus proche de la date cible.
Dans votre petit exemple, il semble que vous faites simplement une correspondance en fonction de la date et non de l'heure. Est-ce que cela pourrait fonctionner à la place ?
EDIT : Vous pouvez ignorer ce commentaire en toute sécurité. J'avais regardé trop vite l'exemple.
Voici un script qui dupliquera la correspondance que vous avez dans votre exemple.

La partie réelle du script fait moins de 20 lignes.Pour être complet, j'ai inclus le JSL qui crée vos exemples de tables de données d'origine au début du script.Cela vous permet de simplement couper et coller le script et il devrait s'exécuter sans erreur.
Names Default To Here( 1 );
dt = New Table( "Base",
Add Rows( 11 ),
New Column( "Timestamp",
Numeric,
"Continuous",
Format( "m/d/y h:m", 19 ),
Input Format( "m/d/y h:m" ),
Set Values(
[3695629500, 3695636340, 3695672220, 3696019260, 3696076800, 3696099720, 3696483600, 3696494460, 3696743700,
3696753000, 3696764400]
)
),
New Column( "Column A",
Character( 16 ),
"Nominal",
Set Values( {"A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11"} )
),
New Column( "Column B",
Character( 16 ),
"Nominal",
Set Values( {"B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11"} )
)
);
dt2 = New Table( "Match",
Add Rows( 4 ),
New Column( "Timestamp",
Numeric,
"Continuous",
Format( "m/d/y h:m", 19 ),
Input Format( "m/d/y h:m" ),
Set Values( [3695628240, 3696019620, 3696488940, 3696750960] )
),
New Column( "Column C", Character( 16 ), "Nominal", Set Values( {"C1", "C2", "C3", "C4"} ) ),
New Column( "Column D", Character( 16 ), "Nominal", Set Values( {"D1", "D2", "D3", "D4"} ) )
);
// Here is the actual matching code
dt << New Column("TheRow");
dt2 << New Column("TheRow", formula(Row()));
// Find the row in the Match data table that is to be paired with the row
// in the Base data table
For( i = 1, i <= N Rows( dt ), i++,
dt:theRow[i] = Max( dt2 << get rows where( dt2:timestamp <= dt:Timestamp[i] ) )
);
// Update data tables
Data Table( "Base" ) << Update(
With( Data Table( "Match" ) ),
Match Columns( :TheRow = :TheRow )
);
// Delete column: TheRow
Data Table( "Base" ) << Delete Columns( :TheRow );
// Delete column: TheRow
Data Table( "Match" ) << Delete Columns( :TheRow );