大家好!
我遇到一個問題,資料表 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 下午 04: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 下午 04: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 );