Consulta JSL: encuentre una fila del mismo nombre en la misma columna, luego compare la fecha y encuentre una fecha posterior
Hola a todos,
Tengo un datatable a continuación, quiero comparar,
1. la columna SN primero para encontrar si hay una fila del mismo nombre,
2. luego compare la fila del mismo nombre para encontrar cuál es la fila que tiene fecha posterior en la columna "fecha1",
3. Luego asigne esa fila como "1" a la columna LLR.
Estoy utilizando el siguiente script, pero no funciona, no sé cómo depurarlo. ¿Puede alguien ayudarme a aprender?
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: Consulta JSL: Encuentre una fila del mismo nombre en la misma columna, luego compare la fecha y encuentre una fecha posteriorNo está seguro de lo que quiere, pero puede probar una fórmula de columna con la función Col Max (), agrupada después de SN.
Dos ejemplos:
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: Consulta JSL: Encuentre una fila del mismo nombre en la misma columna, luego compare la fecha y encuentre una fecha posteriorNo estoy seguro de haber entendido exactamente lo que estás preguntando. Pero si estoy cerca, el siguiente código podría ayudar. Si está comenzando con JSL, le animo a que use 'Ayuda> Índice de secuencias de comandos' para comprender cómo funciona. Además, tenga en cuenta que hay muchas maneras de hacer esto, y de esta manera puede o no ser "mejor" que los demás.
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: Consulta JSL: Encuentre una fila del mismo nombre en la misma columna, luego compare la fecha y encuentre una fecha posteriorAquí está la mesa.
| SN |
FECHA 1 |
LLR |
LLR 2 |
| una |
7/29/2017 12:27 |
1 |
|
| segundo |
9/1/2017 9:24 |
1 |
|
| segundo |
9/1/2017 9:25 |
1 |
|
| do |
4/4/2017 19:46 |
1 |
|
| do |
31/08/2017 23:22 |
1 |
|
| do |
4/4/2017 19:27 |
1 |
|