Exakte Übereinstimmung und Nächste Übereinstimmung zum Aktualisieren einer Tabelle mit einer anderen TabelleIch habe eine Big-Data-Tabelle (1 Mio. Zeilen).Eine Spalte ist serialNumber, eine Spalte ist dateTime, eine Spalte ist elapsedTime.Eine andere, viel kleinere Tabelle enthält ebenfalls diese Spalten, aber „dateTime“ liegt etwas früher (5–20 Minuten) und „elapsedTime“ ist ein viel genauerer Wert.Die kleine Tabelle enthält außerdem viele zusätzliche Zeilen, die anderen Ereignissen zu anderen Datums- und Uhrzeitangaben zugeordnet sind (ich habe keine Spalte „Ereignis“).Ich möchte die große Tabelle mit den genauen elapsedTimes aktualisieren, indem ich die serialNumbers abgleiche und die größte dateTime auswähle, die kleiner oder gleich der dateTime der großen Tabelle ist.
Dies wird Teil eines größeren Skripts sein, das täglich ausgeführt wird und jede Seriennummer jeden Tag aktualisiert.
Im Moment besteht meine beste Lösung darin, Kompromisse bei der Genauigkeit einzugehen und einfach die durchschnittliche verstrichene Zeit für den gesamten Tag auszuwählen und eine exakte Übereinstimmung für die Spalte „dateTime“ zu verwenden.Dies führt zu einer Ungenauigkeit, wenn die kleine Tabelle mehrere Ereignisse zu mehreren Zeitpunkten innerhalb eines bestimmten Tages enthält, die Angabe „innerhalb von 12 Stunden“ jedoch immer noch viel genauer ist als die große Tabelle derzeit.
Es gibt eine andere Lösung, die ein Paar verschachtelter foreachrows-Schleifen verwendet, aber das ist sehr langsam.
Wenn Sie eine Idee haben, schlagen Sie sie bitte einfach vor. Machen Sie sich (noch) keine Gedanken über das Schreiben des Codes.
Danke,
Jonathan
Betreff: Genaue Übereinstimmung und Nächste Übereinstimmung zum Aktualisieren einer Tabelle mit einer anderen TabelleDas ist eine Methode, die ich in der Vergangenheit verwendet habe, und sie wird schneller laufen. Achten Sie jedoch auf Datensätze, denen keiner der verschachtelten Datensätze folgt oder vorausgeht.
Betreff: Genaue Übereinstimmung und Nächste Übereinstimmung zum Aktualisieren einer Tabelle mit einer anderen TabelleTX, ich bin erstaunt über Ihre Geschwindigkeit und Ihr Verständnis.In Ihrer Antwort wird auf subtile Weise nicht erwähnt, dass für jede SN-Schleife eine Verlangsamung erforderlich ist.
Als ich meinen Beitrag beendete, kam mir folgende Idee:
Unterteilen Sie die große Tabelle und wählen Sie nur das Datumsfenster der kleinen Tabelle aus.
Verketten Sie die Teilmengentabelle mit der kleinen Tabelle mit Ausnahme der Spalte „elapsedTime“.
Sortieren Sie die verkettete Tabelle nach SN und Datum/Uhrzeit
Füllen Sie die fehlenden elapsedTimes mit der vorherigen Zeile aus.
Aktualisieren Sie die große Tabelle mit der verketteten Tabelle.
Betreff: Genaue Übereinstimmung und Nächste Übereinstimmung zum Aktualisieren einer Tabelle mit einer anderen TabelleIch würde vorschlagen, dass Sie etwas verwenden wie;
theRows = dt2 << select rows where( dt2:serialNumber == dt21:serialNumber[i] &
dt2:dateTime <= dt1:dateTime );
if( N Rows( theRows ) > 0, targetRow = theRows[N Rows( theRows )] );