大家好!
我遇到一个问题,数据表 1 如下所示,其中包含时间戳列和各种数据列
| 时间戳 | A栏 | B栏 |
| 02/08/2021 11:45 上午 | A1 | B1 |
| 2021 年 2 月 8 日下午 1:39 | A2 | B2 |
| 02/08/2021 11:37 下午 | A3 | B3 |
| 2021 年 2 月 13 日 12:01 | A4 | B4 |
| 2021/02/13 下午 4:00 | A5 | B5 |
| 2021 年 2 月 13 日 10:22 | A6 | B6 |
| 2021 年 2 月 18 日 9:00 | A7 | B7 |
| 2021年2月18日 12:01 | A8 | B8 |
| 2021/02/21 上午 9:15 | A9 | B9 |
| 2021 年 2 月 21 日 11:50 | A10 | B10 |
| 2021 年 2 月 21 日 下午 3:00 | A11 | B11 |
并且数据表2还带有时间戳列和相应的数据列
| 时间戳 | C栏 | D 栏 |
| 02/08/2021 11:24 上午 | C1 | D1 |
| 2021 年 2 月 13 日 12:07 | C2 | D2 |
| 2021 年 2 月 18 日 10:29 | C3 | D3 |
| 2021 年 2 月 21 日 11:16 | C4 | D4 |
我想将这两个数据表连接在一起,其中保留数据表 1 的时间戳列,但将数据表 2 中的 C 列和 D 列连接到数据表 1,其中从数据中时间戳中指示的时间开始应用数据表 2.结果列如下所示:
| 时间戳 | A栏 | B栏 | C栏 | D 栏 |
| 02/08/2021 11:45 上午 | A1 | B1 | C1 | D1 |
| 2021 年 2 月 8 日下午 1:39 | A2 | B2 | C1 | D1 |
| 02/08/2021 11:37 下午 | A3 | B3 | C1 | D1 |
| 2021 年 2 月 13 日 12:01 | A4 | B4 | C1 | D1 |
| 2021/02/13 下午 4:00 | A5 | B5 | C2 | D2 |
| 2021 年 2 月 13 日 10:22 | A6 | B6 | C2 | D2 |
| 2021 年 2 月 18 日 9:00 | A7 | B7 | C2 | D2 |
| 2021年2月18日 12:01 | A8 | B8 | C3 | D3 |
| 2021/02/21 上午 9:15 | A9 | B9 | C3 | D3 |
| 2021 年 2 月 21 日 11:50 | A10 | B10 | C4 | D4 |
| 2021 年 2 月 21 日 下午 3:00 | A11 | B11 | C4 | D4 |
预先感谢您的任何帮助!
你当然是对的@tx尼尔森。 我只是看得太快了。 我已经编辑了我原来的回复。
@丹_奥伯米勒
其中 2 行根据日期不匹配。所示的表格匹配似乎是基于最接近目标日期的先前日期。
在您的小示例中,您似乎只是根据日期而不是时间进行匹配。 这可能可行吗?
编辑:您可以安全地忽略此评论。 我看这个例子的速度太快了。
这是一个脚本,它将复制您的示例中的匹配项。

脚本的实际工作部分不到 20 行。为了完整起见,我在脚本的开头包含了用于创建原始示例数据表的 JSL。这样您只需剪切并粘贴脚本,它就可以正确运行。
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 );