Query JSL: trova la stessa riga del nome nella stessa colonna, quindi confronta la data e trova una data successiva
Ciao a tutti,
Ho un datatable qui sotto, voglio confrontare,
1. prima la colonna SN per trovare se c'è una riga con lo stesso nome,
2. quindi confronta la stessa riga del nome per trovare quale riga ha una data successiva nella colonna "data1",
3. Quindi assegna quella riga come "1" alla colonna LLR.
Sto usando sotto lo script, ma non funziona, non so come fare il debug, qualcuno può aiutarmi ad imparare?
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")));

Ri: query JSL: trova la stessa riga del nome nella stessa colonna, quindi confronta la data e trova una data successivaNon sei sicuro di quello che vuoi, ma potresti provare una formula di colonna con la funzione Col Max (), raggruppata dopo SN.
Due esempi:
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)));
Ri: query JSL: trova la stessa riga del nome nella stessa colonna, quindi confronta la data e trova una data successivaNon sono sicuro di aver capito esattamente cosa stai chiedendo. Ma se sono vicino, il seguente codice potrebbe aiutare. Se stai iniziando con JSL, ti incoraggio ad usare "Aiuto> Scripting Index" per capire come funziona. Inoltre, tieni presente che ci sono molti modi per farlo, e in questo modo può essere o non essere "migliore" degli altri.
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;
);Ri: query JSL: trova la stessa riga del nome nella stessa colonna, quindi confronta la data e trova una data successivaEcco il tavolo.
| SN |
DATE1 |
LLR |
LLR 2 |
| un |
29/7/2017 12:27 |
1 |
|
| B |
9/1/2017 9:24 |
1 |
|
| B |
9/1/2017 9:25 |
1 |
|
| c |
9/4/2017 19:46 |
1 |
|
| c |
31/8/2017 23:22 |
1 |
|
| c |
9/4/2017 19:27 |
1 |
|