Salut,
Je veux accomplir quelque chose que je pense très simple : joindre des tables en fonction de dates.
Disons que j'ai les tableaux suivants :
Table1 - qui comporte les colonnes suivantes : Group1, event_date.
Table2 - qui contient les colonnes suivantes : Group2, start_date, end_date.
Je souhaite que la jointure fonctionne comme suit : (Group1 == Group2) AND (start_date < date < end_date)
Comment puis-je accomplir cela en utilisant un code JSL ?
Merci
Parfait! Je ne savais pas que vous pouviez travailler avec la syntaxe SQL dans JMP. Cela me rendra la vie beaucoup plus facile à partir de maintenant.
Merci
Je pense qu'il sera plus simple d'interroger cela et d'écrire du SQL pour la jointure
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;
]\"
);
Ce n'est pas la seule option mais elle devrait être assez simple et facile à comprendre (si vous connaissez SQL).
Modifier:
En fonction de la taille de votre table, vous pouvez également effectuer une jointure gauche (ou une jointure complète), puis supprimer les valeurs qui ne réussissent pas la vérification de date :
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;