tabla de actualización basada en la marca de tiempoHola,
Tengo dos mesas. (A y 
La tabla A contiene (2000 eventos a lo largo de la duración de una prueba) eventos que marcan el comienzo de un período y el nombre del período en marcas de tiempo específicas (la línea subrayada es el encabezado)
Marca de tiempo, Período
30-12-2021 17:35:49.1, A
30-12-2021 17:39:36.8, B
...
entonces el período A está entre "30-12-2021 17:35:49.1" y "30-12-2021 17:39:36.8"
La tabla B es de un archivo de registro que registra datos también con marcas de tiempo (la línea subrayada es el encabezado) alrededor de 6000000 puntos de datos
marca de tiempo, sensor1, sensor2, sensor3 ,...
30-12-2021 17:37:21.2, valor, valor, valor,...
30-12-2021 17:37:22.2, valor, valor, valor,...
30-12-2021 17:37:23.2, valor, valor, valor,...
Me gustaría agregar una columna ahora a la tabla B con el valor del período de la tabla A en función del valor de la marca de tiempo en B.
Si la marca de tiempo en B es mayor o igual que la marca de tiempo en la Fila (N) de la tabla A Y también es más pequeña que la marca de tiempo en la Fila (N+1) de la tabla A, entonces se asignará el valor del período en la Fila (N) para ese registro en la tabla B (la marca de tiempo en B está entre dos marcas de tiempo en A)
¿Alguna sugerencia?
Gracias
ventanasRe: tabla de actualización basada en la marca de tiempoOrdenar la tabla de búsqueda y usar Loc ordenado () . Consulte la función en el índice de secuencias de comandos para ver cómo funciona.
Re: tabla de actualización basada en la marca de tiempoAquí hay una posible solución usando @ErraticAdjuntar sugerencia sobre el método a utilizar.
Names Default To Here( 1 );
dta = Data Table( "table A" );
dtb = Data Table( "table B" );
// Place all timestamp values from Table A & B
timesa = dta:timestamp << get values;
timesb = dtb:timestamp << get values;
// Find the row to add the data to
rows = Loc Sorted( timesa, timesb );
// Add the new columns to Table A
dta << New Column( "sensor1" );
dta << New Column( "sensor2" );
dta << New Column( "sensor3" );
// Loop through matrix rows and add the records to the appropriate
// row in Table A
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[theRow] = dtb:sensor1[i];
dta:sensor2[theRow] = dtb:sensor2[i];
dta:sensor3[theRow] = dtb:sensor3[i];
);
Re: tabla de actualización basada en la marca de tiempoMuchas gracias ErraticAttach y txnelson
Jim, ¿podría ser que la indexación esté al revés de alguna manera?
el Loc ordenado obtiene para cada fila en B el número de fila en la Tabla A que contiene la información que quiero poner en la tabla B
Sin embargo, aparece un error dentro del bucle sobre el alcance.
1. si entiendo correctamente, las "filas" deben tener el mismo número de filas que la tabla B
2. el parámetro "i" aumenta de 1 al número de filas en B.
3. en cada iteración del ciclo, al parámetro "theRow" se le asigna el i-ésimo número correspondiente en "rows".
por lo que en realidad contiene un número que representa una línea específica en la tabla A que contiene los datos que quiero.
4. Así que ahora todo lo que tenemos que hacer es leer el valor en la columna apropiada en A en esa línea y ponerlo en la i-ésima fila de B en la columna que quiero.
Sin embargo, aparece un error sobre "el acceso a la tabla de datos con ámbito requiere una columna o variable de la tabla de datos en el acceso o la evaluación de..."
mirando el código, creo que el script hace referencia al número incorrecto como índice.
así que cambié entre [i] y [theRow]
"
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[theRow] = dtb:sensor1[i];
dta:sensor2[theRow] = dtb:sensor2[i];
dta:sensor3[theRow] = dtb:sensor3[i];
);
en realidad debería leer
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[i] = dtb:sensor1[theRow];
dta:sensor2[i] = dtb:sensor2[theRow];
dta:sensor3[i] = dtb:sensor3[theRow];
);
sin embargo eso tampoco ayuda.
Todavía no estoy familiarizado con JSL, entonces, ¿podría ser que la forma en que especifico los valores o la columna y la fila sean incorrectas?
Muchísimas gracias.