嗨甘迺迪3,
如果您正在尋找手動執行此操作的方法,那麼以下方法(可以輕鬆編寫腳本)應該適合您。 下面的公式將「更改等級」的值複製到新的公式列中,直到它遇到具有新「變更等級」的時間戳記。
假設:表1和表2的Date列名相同;
在下面的步驟中,表 1 有一個名為「更改等級」的列
第 1 步:使用 Tables => Concatenate 將一個表格附加到另一個表
步驟 2:使用 Tables => Sort 依日期對新表進行排序
步驟 3:使用下列公式在結果表中建立公式列:
(在上面的公式中,新的公式列稱為「第 3 列」)
如果您不想在結果表中保留表 1 中的資訊(即,如果它只是一個「尋找」表),您可以從「更改等級」列中選擇所有非缺失行並將其刪除。
希望這可以幫助…
我在監控家裡的各種感測器時也遇到類似的問題。 我在整個房子裡有 5 個感測器,用於測量溫度、濕度和照度。 它們每 8 分鐘將測量結果傳送到中央集線器 (SmartThings),除非該值與先前的值相比沒有變化。 我還有一個連續功率計,用來測量房屋內的用電量。
我處理這個問題的方法是建立一個「5 分鐘年」JMP 資料表,其中一年每 5 分鐘就有一個樣本。 然後我使用腳本將 20 個感測器的值插入今年 5 分鐘表中。 因此,如果我有一個感測器的特定樣本的讀數,它就會被記錄下來,如果沒有,就會有一個缺失值。
5 分鐘年份:

我有另一個腳本,它可以讓我可視化「感測器健康狀況」——基本上是「IsMissing」檢查。 當我遇到網路問題、感測器問題等時,這可以讓我知道。這非常有幫助。 並視覺化我的加入是否有效。

因此基本上策略是在測量中以最短的時間間隔(每分鐘)使用主採樣表,並將每個感測器連接到該主表。
我認為這是“交織”而不是“連接”,而且肯定不止一個結果是令人滿意的。
我挖出了一些我認為接近你想要的舊代碼。 而且,即使在 JSL 的世界裡,也會有好的和不太好的方法來到達你想去的地方。 因此,作為 Eric 方法的替代方案,請參閱下文。 我確信它可以變得更有效率,這可能是其他人想要嘗試的東西。 。 。
名稱預設到這裡( 1 ) ;
// 在兩個表中建立一些「日期」數據
NF = 100 ;
瓦爾斯= J ( NF , 1 ,隨機整數(日期DMY ( 1 , 1 , 2014年) ,日期DMY ( 31 , 12 , 2014年))) ;
精細=新表( “2014 年的日期和時間 - 很好” ,
新專欄( “日期” ,數位,連續的,
格式( “ddMonyyyy 小時:分:秒” , 22 , 0 ) ,
輸入格式( “ddMonyyyy 小時:分:秒” , 0 ) ,
價值觀(瓦爾斯)
)
) ;
數控= 10 ;
瓦爾斯= J (數控, 1 ,隨機整數(日期DMY ( 1 , 1 , 2014年) ,日期DMY ( 31 , 12 , 2014年))) ;
dt粗略=新表( “2014 年的日期和時間 - 粗略” ,
新專欄( “日期” ,數位,連續的,
格式( “ddMonyyyy 小時:分:秒” , 22 , 0 ) ,
輸入格式( “ddMonyyyy 小時:分:秒” , 0 ) ,
價值觀(瓦爾斯)
) ,
新專欄( “溫度” ,數位,連續的,公式(隨機常態( 18 , 2 )))
) ;
精細<<種類(經過( :日期) ,命令(上升) ,替換錶) ;
dt粗略<<種類(經過( :日期) ,命令(上升) ,替換錶) ;
// ************************************************ ** ************************************************ ****** ****
// 將粗略資料與精細資料交錯
// ************************************************ ** ************************************************ ****** ****
// 將 dtCoarse 的欄位加入到 dtFine
等待( 3 ) ;
n = NCOL (精細) ;
列= dt粗略<<取得列名( “細繩” ) ;
為了( C = 1 , C <= N項(列) , C ++,
資料類型=柱子( dt粗略,列[ C ]) <<取得資料類型;
類型=柱子( dt粗略,列[ C ]) <<取得建模類型;
新增列=表達式(精細<<新專欄(列[ C ] ,資料類型,類型,格式待定)) ;
代入(新增列,表達式(格式待定) ,柱子( dt粗略,列[ C ]) <<取得格式) ;
新增列;
) ;
// ************************************************ ** ************************************************ ****** ****
// 邏輯依賴兩個表格按升序排序!
// ************************************************ ** ************************************************ ****** ****
精細DT =柱子(精細, “日期” ) <<獲取值;
粗DT =柱子( dt粗略, “日期” ) <<獲取值;
如果(
// dtCoarse 中的時間不晚於 dtFine 中的最早時間,因此將值插入到後者的第一行中
最大限度(粗DT ) <最小(精細DT ) ,
為了( C = 1 , C <= N項(列) , C ++,
柱子(精細, n + C )[ 1 ] =柱子( dt粗略,列[ C ])[列( dt粗略)] ;
) ,
// 別的 。 。 。
// pos 將包含 dtFine 中應插入 dtCoarse 中的值的行的位置。
// (注意:如果 pos 中的值大於 NRow(dtFine),則不會向後者添加任何行,並且不會產生錯誤結果)。
位置=本地排序(精細DT ,粗DT ) ;
位置=位置+ J (列(位置) , 1 , 1 ) ;
// 在儲存格中插入值
為了( p = 1 , p <=列(位置) , p ++,
為了( C = 1 , C <= N項(列) , C ++,
柱子(精細, n + C )[位置[ p ]] =柱子( dt粗略,列[ C ])[ p ] ;
) ;
) ;
) ;
嘿,甘迺迪3,
我認為這是一個常見問題,因為感測器只記錄電平變化,而不是記錄電平變化,即使在固定間隔內沒有變化,所以我決定稍微考慮一下。我知道如何做到這一點的唯一方法是使用複合查詢,這對於大型表來說可能效率低得令人望而卻步,或者也許您可以想出一種更有效的變體。
這是一個例子:假設我經營鄉村俱樂部,我正在研究高爾夫球手的數量與溫度之間的關係。我所擁有的溫度數據只是一張每周平均溫度表:

對於高爾夫球手的數量,我有一個暑期學生隨機為我工作,我讓她數一下高爾夫球手的數量。這是她的數據:

請注意,她統計高爾夫球手的日期與平均高溫讀數的日期並不對應。對於她統計高爾夫球手的每個日期,我想要做的是找到該周初的溫度讀數。如果我用條件「Week <= TestDate」連接兩個表,使用以下 SQL:
SELECT t2.TestDate, t1.Week
FROM dbo.Golfers t2
LEFT OUTER JOIN dbo.AvgHighTemps t1
ON ( t1.Week <= t2.TestDate )
ORDER BY t2.TestDate ASC;
我會得到一個看起來像這樣的表:

請注意,每個 TestDate 現在都有多個匹配週。但是,如果我取出具有小於 TestDate 的最大周日期的行,那將是我想要的周。我可以用這個 SQL 來做到這一點:
SELECT t2.TestDate, MAX(t1.Week) AS Week
FROM dbo.AvgHighTemps t1
FULL OUTER JOIN dbo.Golfers t2
ON ( t2.TestDate >= t1.Week )
GROUP BY t2.TestDate
ORDER BY t2.TestDate ASC;
結果表如下:

現在是棘手的部分。我需要將該查詢用作子查詢,將其他兩個表連接到其中,以獲得我想要的結果。這是 SQL:
SELECT t1.Week, t1.AvgHighTemp, t2.TestDate, t2.NGolfers
FROM (
SELECT t1.TestDate, MAX(t2.Week) as TempWeek
FROM dbo.Golfers t1
LEFT OUTER JOIN dbo.AvgHighTemps t2
ON ( t2.Week <= t1.TestDate )
GROUP BY t1.TestDate
) tempFinder
RIGHT OUTER JOIN dbo.AvgHighTemps t1
ON t1.Week = tempFinder.TempWeek
RIGHT OUTER JOIN dbo.Golfers t2
ON t2.TestDate = tempFinder.TestDate
;
結果是一個表格,其中包含高爾夫球手的數量和相應週的平均氣溫:

到達那裡需要做一些工作,但我個人不知道有其他方法可以做到這一點。
希望這可以幫助,
艾瑞克