tabella di aggiornamento in base al timestampCiao,
Ho due tavoli. (A e 
La tabella A contiene (2000 eventi lungo la durata di un test) eventi che segnano l'inizio di un periodo e il nome del periodo in date/ora specifiche (la riga sottolineata è l'intestazione)
TimeStamp, punto
30-12-2021 17:35:49.1, A
30-12-2021 17:39:36.8, B
...
quindi il periodo A è compreso tra "30-12-2021 17:35:49.1" e "30-12-2021 17:39:36.8"
La tabella B è di un file di registro che registra dati anche con timestamp (la riga sottolineata è l'intestazione) circa 6000000 punti dati
timestamp, sensore1, sensore2, sensore3 ,...
30-12-2021 17:37:21.2, valore, valore, valore,...
30-12-2021 17:37:22.2, valore, valore, valore,...
30-12-2021 17:37:23.2, valore, valore, valore,...
Vorrei aggiungere una colonna now alla tabella B con il valore del periodo dalla tabella A in base al valore del timestamp in B.
Se il timestamp in B è maggiore o uguale al timestamp nella riga (N) nella tabella A E anche inferiore al timestamp nella riga (N+1) della tabella A, il valore del periodo nella riga (N) verrà assegnato per quel record nella tabella B (il timestamp in B è compreso tra due timestamp in A)
Eventuali suggerimenti?
Grazie
finestreRe: aggiornamento tabella in base al timestampOrdina la tabella di ricerca e usa Loc ordinata() . Controlla la funzione nell'indice degli script per vedere come funziona.
Re: aggiornamento tabella in base al timestampEcco una possibile soluzione utilizzando @ErraticAttach suggerimento sul metodo da utilizzare.
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: aggiornamento tabella in base al timestampGrazie mille ErraticAttach e txnelson
Jim, potrebbe essere che l'indicizzazione sia in qualche modo all'indietro?
il Loc ordinato sta ottenendo per ogni riga in B il numero di riga nella tabella A che contiene le informazioni che voglio inserire nella tabella B
Tuttavia, ricevo un errore all'interno del ciclo sull'ambito.
1. se ho capito bene, "righe" dovrebbe avere lo stesso numero di righe della tabella B
2. il parametro "i" aumenta da 1 al numero di righe in B.
3. ad ogni iterazione del ciclo, al parametro "theRow" viene assegnato il corrispondente i-esimo numero in "rows".
quindi in realtà contiene un numero che rappresenta una riga specifica nella tabella A che contiene i dati che desidero.
4. quindi ora tutto ciò che dobbiamo fare è leggere il valore nella colonna appropriata in A su quella riga e inserirlo nella i-esima riga di B nella colonna che voglio.
Tuttavia, viene visualizzato un errore su "l'accesso alla tabella dei dati con ambito richiede una colonna o una variabile della tabella dei dati nell'accesso o nella valutazione di ..."
guardando il codice penso che lo script faccia riferimento al numero sbagliato come indice.
quindi sono passato tra [i] e [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];
);
dovrebbe effettivamente leggere
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];
);
tuttavia anche questo non aiuta.
Non ho ancora familiarità con JSL, quindi potrebbe essere che il modo in cui specifico i valori o la colonna e la riga non è corretto?
Grazie mille.