Requête JSL: recherchez une même ligne de nom dans la même colonne, puis comparez la date et recherchez une date ultérieure
Salut à tous,
J'ai un datatable ci-dessous, je veux comparer,
1. la colonne SN d'abord pour trouver s'il y a une même ligne de nom,
2 puis comparez la même ligne de nom pour trouver laquelle est la dernière date dans la colonne "date1",
3 Affectez ensuite cette ligne à "1" à la colonne LLR.
J'utilise le script ci-dessous, mais cela ne fonctionne pas, je ne sais pas comment le déboguer, quelqu'un peut-il m'aider à apprendre?
dt = Current Data Table();
New Column( "LLR");
For( i = 1, i <= N Row( dt ), i++,
SNcol = Column( dt, "SN" )[i];
Datecol = Column( dt, "DATE1" )[i];
For( j = 1, j <= N Row( dt ), j++,
If( Column( dt, "SN" )[j] == SNcol,
Column( dt, "DATE1" )[j]>Column( dt, "DATE1" )[i],"1"
"0")));

Re: Requête JSL: Recherchez une ligne de même nom dans la même colonne, puis comparez la date et recherchez une date ultérieureVous ne savez pas exactement ce que vous voulez, mais vous pouvez essayer une formule de colonne avec la fonction Col Max (), groupée après SN.
Deux exemples:
dt = Current Data Table();
// Returns 1 for max DATE of each SN
dt << New Column("LLR", Formula(If(Col Max(:DATE1, :SN) == :DATE1, 1)));
// Returns 1 for max DATE of each replicated SN
dt << New Column("LLR2", Formula(If(Col Max(:DATE1, :SN) == :DATE1 & Col Number(:SN, :SN) > 1, 1)));
Re: Requête JSL: Recherchez une ligne de même nom dans la même colonne, puis comparez la date et recherchez une date ultérieureJe ne suis pas sûr d'avoir compris exactement ce que vous demandez. Mais si je suis proche, le code suivant pourrait aider. Si vous commencez avec JSL, je vous encourage à utiliser "Aide> Index de script" pour comprendre comment cela fonctionne. N'oubliez pas non plus qu'il existe de nombreuses façons de le faire, et que ce moyen peut être ou ne pas être «meilleur» que les autres.
NamesDefaultToHere(1);
// Make a table to play with
dt = New Table( "Mark the Latest Date",
Add Rows( 25 ),
New Column( "Group",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula(RandomInteger(1, 5))
),
New Column( "DateTime",
Numeric,
"Continuous",
Format( "ddMonyyyy h:m:s", 22, 0 ),
Input Format( "ddMonyyyy h:m:s", 0 ),
Formula( Random Uniform( Today() - In Days( 7 ), Today() ) )
),
);
dt << runFormulas;
Column(dt, "Group") << deleteFormula;
dt << Sort(By(:Group), Replace Table);
// Start Here . . .
gVals = Column(dt, "Group") << getValues; // Values in the 'grouping' column
dtVals = Column(dt, "DateTime") << getValues; // Values in the 'DateTime' column
dt << NewColumn("Is Latest?", Numeric, Nominal, ValueLabels({0 = "No", 1 = "Yes"}), Values(J(NRow(dt), 1, 0))); // New column
// Loop over the groups
for(g=1, g<=Max(gVals), g++,
// Find which row the maximum for the current group is in
dtVals2 = dtVals; // Copy all the values
dtVals2[Loc(gVals != g)] = .; // Set values not corresponding to the current group to missing
r = LocMax(dtVals2); // Get the position (row number) of the maximum of the values that are left
// Overwrite the existing "0" value for this row
Column(dt, "Is Latest?")[r] = 1;
);Re: Requête JSL: Recherchez une ligne de même nom dans la même colonne, puis comparez la date et recherchez une date ultérieureVoici la table.
| SN |
DATE1 |
LLR |
LLR 2 |
| une |
29/07/2017 12:27 |
1 |
|
| b |
01/09/2017 9:24 |
1 |
|
| b |
01/09/2017 9:25 |
1 |
|
| c |
04/09/2017 19:46 |
1 |
|
| c |
31/08/2017 23:22 |
1 |
|
| c |
04/09/2017 19:27 |
1 |
|