JSL-Abfrage: Suchen Sie in derselben Spalte eine Zeile mit demselben Namen, vergleichen Sie dann das Datum und suchen Sie nach einem späteren Datum
Hallo zusammen,
Ich habe eine Datentabelle unten, ich möchte vergleichen,
1 die SN-Spalte zuerst, um herauszufinden, ob es eine gleichnamige Zeile gibt,
2 Vergleichen Sie dann dieselbe Namenszeile, um herauszufinden, welche Zeile ein späteres Datum in der Spalte "Datum1" hat.
3. Dann ordnen Sie diese Zeile der Spalte LLR als "1" zu.
Ich verwende das folgende Skript, aber es funktioniert nicht. Ich weiß nicht, wie ich es debuggen kann. Kann mir jemand beim Lernen helfen?
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")));

Betreff: JSL-Abfrage: Suchen Sie in derselben Spalte eine Zeile mit demselben Namen, vergleichen Sie dann das Datum und suchen Sie nach einem späteren DatumSie wissen nicht genau, was Sie wollen, aber Sie können eine Spaltenformel mit der Col Max () - Funktion ausprobieren, die nach SN gruppiert ist.
Zwei Beispiele:
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)));
Betreff: JSL-Abfrage: Suchen Sie in derselben Spalte eine Zeile mit demselben Namen, vergleichen Sie dann das Datum und suchen Sie nach einem späteren DatumIch bin nicht sicher, ob ich genau verstanden habe, was Sie fragen. Aber wenn ich nahe bin, kann der folgende Code helfen. Wenn Sie mit JSL beginnen, sollten Sie "Hilfe> Skriptindex" verwenden, um die Funktionsweise zu verstehen. Denken Sie auch daran, dass es viele Möglichkeiten gibt, dies zu tun, und dieser Weg kann "besser" sein als die anderen.
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;
);Betreff: JSL-Abfrage: Suchen Sie in derselben Spalte eine Zeile mit demselben Namen, vergleichen Sie dann das Datum und suchen Sie nach einem späteren DatumHier ist der Tisch.
| SN |
DATE1 |
LLR |
LLR 2 |
| ein |
29.07.2017, 12:27 Uhr |
1 |
|
| b |
01.09.2017, 9:24 Uhr |
1 |
|
| b |
01.09.2017, 9:25 Uhr |
1 |
|
| c |
9/4/2017 19:46 |
1 |
|
| c |
31.08.2017, 23:22 Uhr |
1 |
|
| c |
9/4/2017 19:27 |
1 |
|