Concordancia exacta y concordancia más cercana para actualizar una tabla con otra tablaTengo una tabla de big data (1M filas). Una columna es serialNumber, una columna es dateTime, una columna es elapsedTime. Otra tabla mucho más pequeña también tiene estas columnas, pero dateTime es anterior por una pequeña cantidad (5-20 minutos) y el tiempo transcurrido es un valor mucho más preciso. La tabla pequeña también tiene muchas filas adicionales asociadas con otros eventos en otros dateTimes (no tengo una columna de 'evento'). Quiero actualizar la tabla grande con los tiempos transcurridos exactos haciendo coincidir los Números de serie y seleccionando la fecha y hora más grande menor o igual a la fecha y hora de la tabla grande.
Esto formará parte de un script más grande que se ejecuta diariamente, actualizando cada número de serie cada día.
En este momento, mi mejor solución es comprometer la precisión y simplemente seleccionar el tiempo transcurrido promedio para todo el día, y usar una coincidencia exacta para la columna dateTime. Esto introducirá una imprecisión cuando la tabla pequeña incluya varios eventos en varias ocasiones dentro de un día determinado, pero "dentro de las 12 horas" es todavía mucho más precisa que la tabla grande en la actualidad.
Hay otras soluciones que utilizan un par de bucles foreachrows anidados, pero eso será muy lento.
Si tiene una idea, por favor sugiérala, no se preocupe por escribir el código (todavía).
Gracias,
Jonathan
Re: coincidencia exacta y coincidencia más cercana para actualizar una tabla con otra tablaEse es un método que he usado en el pasado y se ejecutará más rápido. Pero, fíjese en los registros que no tengan ninguno de los registros intercalados que los siguen o los preceden.
Re: coincidencia exacta y coincidencia más cercana para actualizar una tabla con otra tablaTX, me sorprende tu velocidad y comprensión. Su respuesta sutilmente no menciona una ralentización para cada bucle SN.
Cuando estaba terminando mi publicación tuve los comienzos de esta idea:
Subconstruya la tabla grande, seleccionando solo la ventana de fecha de la tabla pequeña.
Concatene la tabla de subconjuntos en la tabla pequeña, excluyendo la columna de tiempo transcurrido.
Ordenar la tabla concatenada por SN y fecha y hora
Completa los tiempos transcurridos que faltan con la fila anterior.
Actualiza la tabla grande con la tabla concatenada.
Re: coincidencia exacta y coincidencia más cercana para actualizar una tabla con otra tablaTe sugiero que uses algo como;
theRows = dt2 << select rows where( dt2:serialNumber == dt21:serialNumber[i] &
dt2:dateTime <= dt1:dateTime );
if( N Rows( theRows ) > 0, targetRow = theRows[N Rows( theRows )] );