Corrispondenza esatta e Corrispondenza più vicina per aggiornare una tabella con un'altra tabellaHo una tabella di big data (1 milione di righe).Una colonna è serialNumber, una colonna è dateTime, una colonna è elapsedTime.Anche un'altra tabella molto più piccola ha queste colonne, ma dateTime è leggermente precedente (5-20 minuti) e elapsedTime è un valore molto più accurato.La piccola tabella ha anche molte righe extra associate ad altri eventi in altri dateTime (non ho una colonna "evento").Desidero aggiornare la tabella grande con gli elapsedTimes accurati abbinando serialNumbers e selezionando il dateTime più grande inferiore o uguale al dateTime della tabella grande.
Questo farà parte di uno script più grande che viene eseguito quotidianamente, aggiornando ogni serialNumber ogni giorno.
In questo momento, la mia soluzione migliore è scendere a compromessi sulla precisione e selezionare semplicemente il tempo trascorso medio per l'intera giornata e utilizzare una corrispondenza esatta per la colonna dateTime.Ciò introdurrà un'imprecisione quando la tabella piccola include più eventi in più momenti all'interno di un determinato giorno, ma "entro 12 ore" è comunque molto più precisa di quanto lo sia attualmente la tabella grande.
Esiste un'altra soluzione che utilizza una coppia di cicli foreachrows annidati, ma sarà molto lenta.
Se hai un'idea, suggeriscila e basta, non preoccuparti di scrivere il codice (per ora).
Grazie,
Jonathan
Ri: Corrispondenza esatta e Corrispondenza più vicina per l'aggiornamento di una tabella con un'altra tabellaQuesto è un metodo che ho usato in passato e funzionerà più velocemente. Tuttavia, fare attenzione ai record che non hanno nessuno dei record interfoliati che li seguono o li precedono.
Ri: Corrispondenza esatta e Corrispondenza più vicina per l'aggiornamento di una tabella con un'altra tabellaTX, sono stupito dalla tua velocità e comprensione.La tua risposta non menziona sottilmente un rallentamento per ogni ciclo SN.
Mentre stavo finendo il mio post mi è venuta questa idea:
Sottoimposta la tabella grande, selezionando solo la finestra della data della tabella piccola.
Concatenare la tabella del sottoinsieme sulla tabella piccola escludendo la colonna elapsedTime.
Ordina la tabella concatenata per SN e dateTime
Compila gli elapsedTimes mancanti con la riga precedente.
Aggiorna la tabella grande con la tabella concatenata.
Ri: Corrispondenza esatta e Corrispondenza più vicina per l'aggiornamento di una tabella con un'altra tabellaSuggerirei di utilizzare qualcosa di simile;
theRows = dt2 << select rows where( dt2:serialNumber == dt21:serialNumber[i] &
dt2:dateTime <= dt1:dateTime );
if( N Rows( theRows ) > 0, targetRow = theRows[N Rows( theRows )] );