你好,
我想完成一些我認為非常簡單的事情:根據日期連接表。
假設我有以下表格:
表 1 - 具有以下列:Group1、event_date。
表 2 - 具有以下列:Group2、start_date、end_date。
我希望聯接按如下方式工作: (Group1 == Group2) AND (start_date < date < end_date)
如何使用 JSL 代碼完成此任務?
謝謝
完美的! 我不知道您可以在 JMP 中使用 SQL 語法。 從現在開始,這將使我的生活變得更加輕鬆。
謝謝
我認為查詢這個並為連接編寫一些 SQL 是最簡單的
Names Default To Here(1);
// Using aliases, performing a join
dtSAT = Open("$SAMPLE_DATA/SATByYear.jmp", Invisible);
dtUS = Open("$SAMPLE_DATA/US Demographics.jmp", Invisible);
Query(
Table(dtSAT, "t1"),
Table(dtUS, "t2"),
"\[SELECT t1.State, t1."SAT Math", t2."College Degrees",
t2."Eighth Grade Math"
FROM t1
LEFT OUTER JOIN t2
ON t1.State = t2.State
WHERE t1.'SAT Math' > 550;
]\"
);
它不是唯一的選擇,但它應該相當簡單且易於理解(如果您了解 SQL)。
編輯:
根據表的大小,您還可以執行左連接(或完全連接),然後刪除未通過日期檢查的值:
Names Default To Here(1);
dt1 = New Table("Untitled",
Add Rows(6),
New Column("Column 1", Character, "Nominal", Set Values({"a", "a", "a", "b", "b", "b"})),
New Column("date", Numeric, "Continuous", Format("Best", 12), Set Values([2, 3, 4, 2, 3, 5]))
);
dt2 = New Table("Untitled 2",
Add Rows(2),
New Column("Column 1", Character, "Nominal", Set Values({"a", "b"})),
New Column("start", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1])),
New Column("end", Numeric, "Continuous", Format("Best", 12), Set Selected, Set Values([3, 6]))
);
dt3 = dt1 << Join(
With(dt2),
By Matching Columns(:Column 1 = :Column 1),
Drop multiples(0, 0),
Include Nonmatches(1, 0),
Preserve main table order(1)
);
dt3 << New Column("OK", Numeric, Nominal, << Set Each Value(:start < :date < :end));
dt3 << Select Where(:OK == 0);// << Delete Rows;