Eliminar entradas duplicadas de SQLQuery según la fechaHola,
He intentado usar este video cuyo enlace se encuentra a continuación para usar la función SQLQuery. Sin embargo, tengo un problema.
community.jmp.com/t5/video/gallerypage/video-id/tvcW9lZTE6Ie3IFXxeru0AYNqvj5AB5r
Problema: Tome la Tabla 2 con "cilindro", "Fecha_de_recepción" y "lote" y combínela con la Tabla 1 que tiene "lote", "cilindro" y "Fecha_de_lote"
Necesito hacer coincidir exactamente el "Cilindro" y luego tomar la "Fecha de recepción" inversa más cercana a la "Fecha del lote" (Fecha_del_lote >= Fecha_de_recepción).
Creé la consulta y también realicé el paso para crear una etiqueta numérica que teóricamente debería proporcionar solo 1 número de lote único para cada lote (no se muestra en la tabla a continuación)
Sin embargo, esto es lo que estoy obteniendo.
| Lote | Fecha del lote | Número de cilindro | Número de lote | Fecha de recepción |
| 1 | 13/02/2023 | 55 | A | 14/06/2022 |
| 1 | 13/02/2023 | 55 | B | 21/10/2022 |
| 1 | 13/02/2023 | 55 | C | 30/11/2022 |
Solo debe haber 1 fila completada a partir de la consulta (debe ser la última fila 30/11/2022); las otras son "fantasmas" ya que solo creamos 1 "Lote 1"
¿Alguna ayuda sobre cómo mejorar el código SQL para evitar entradas duplicadas y seleccionar la entrada solo si la fecha de recepción es la más cercana <= fecha del lote?
Este fue el código de la interfaz SQLQuery que se proporcionó
SELECCIONAR DISTINTO t1.Lote, t1.Fecha_Lote COMO Fecha, t1.Número_Cilindro,
t2.Lot_Number, t2.Cylinder_Number AS "Cylinder_Number 2", t2.Lot_Date AS "Fecha 2", MIN(t2."Batch Num") AS "Número mínimo de lote"
DE “Tabla 1” t1
UNIÓN EXTERNA IZQUIERDA "Tabla 2" t2
EN ( ( t1.Número_de_cilindro = t2.Número_de_cilindro ) Y ( t1.Fecha_de_catálogo >= t2.Fecha_de_lote ) )
AGRUPAR POR t1.Lote, t1.Fecha_Lote, t1.Número_Cilindro,
t2.Número_de_Lote, t2.Número_de_Cilindro, t2.Fecha_de_Lote;
Automatización y scriptingRe: Eliminar entradas duplicadas de SQLQuery según la fecha¿Estás realizando la consulta SQL en tablas JMP? ¿Puedes compartirlas?
Re: Eliminar entradas duplicadas de SQLQuery según la fechaAquí están los archivos (perdón, la intención era adjuntarlos).
La Tabla 1-1 y la Tabla 2-2 son como se describen anteriormente.
Los resultados de la consulta muestran la tabla final donde hay múltiples entradas para cada lote (pero solo debe haber 1 entrada por lote como se describe anteriormente).
Re: Eliminar entradas duplicadas de SQLQuery según la fechaAcabo de responder al hilo principal con los archivos, gracias por comunicarte.
Re: Eliminar entradas duplicadas de SQLQuery según la fechaEsto está bastante cerca del límite de lo que intentaría hacer con las limitadas capacidades SQL de JMP (al menos cuando se utilizan tablas de datos). Es probable que sea más sencillo utilizar SQL + JSL
Names Default To Here(1);
res = New SQL Query(
Version(130),
Connection("JMP"),
JMP Tables(
["t1" => "$DOWNLOADS\Table1-1.jmp",
"t2" => "$DOWNLOADS\Table 2-2.jmp"]
),
QueryName("SQLQuery2"),
CustomSQL(
"\[SELECT
t1.Cylinder,
t1.Batch,
t1."Batch Date",
t2."Received Date",
t2.Supplier,
t2.Lot
FROM t1
LEFT OUTER JOIN t2 ON
t1.Cylinder = t2.Cylinder
AND t1."Batch Date" >= t2."Received Date"
]\")
) << Run;
res << select where(Row() == Col Max(Row(), :Cylinder, :Batch) | Is Missing(:Lot));
res << Invert Row Selection;
res << delete rows;Re: Eliminar entradas duplicadas de SQLQuery según la fechaHola. ¡Gracias por la rápida ayuda! Probé la macro y, lamentablemente, para algunos elementos conserva la fecha más antigua posible. Sin embargo, no parece que lo haga con todas las entradas (consulte la última fila de la tabla a continuación).
Por lo tanto, esta es una mejora definitiva, ya que no hay varias filas para el mismo lote, pero no se obtiene de manera constante el lote/fecha de recepción correctos para ese lote en cuestión.
Ejemplo
| Cilindro | Lote | Fecha del lote | Fecha de recepción | Proveedor | Lote | | Fecha de recepción |
| 8 | 2273 | 9/8/2023 | 20/05/2022 | B | 55 | | 22/06/2023 |
| 3 | 2274 | 10/08/2023 | 20/05/2022 | B | 55 | | 22/06/2023 |
| 2 | 2275 | 11/08/2023 | 20/05/2022 | B | 55 | | 22/06/2023 |
| 10 | 2276 | 12/08/2023 | 20/05/2022 | B | 55 | | 22/06/2023 |
| 6 | 2277 | 12/08/2023 | 20/05/2022 | B | 55 | | 22/06/2023 |
| 9 | 2278 | 13/08/2023 | 20/05/2022 | B | 55 | | 22/06/2023 |
| 1 | 2279 | 14/08/2023 | 20/05/2022 | B | 55 | | 22/06/2023 |
| 212 | 2280 | 15/08/2023 | 22/06/2023 | B | 74 | | (el archivo es correcto) |
Re: Eliminar entradas duplicadas de SQLQuery según la fechaNo estoy muy seguro de cómo leer su tabla. Si miro la Tabla 2-2, solo hay una fila para el Cilindro 1, que tiene fecha de recepción 20/05/2022

Re: Eliminar entradas duplicadas de SQLQuery según la fechaHola. Respondo para mantener activo el tema. Creo que ocurrió algo cuando actualicé mi archivo para eliminar información confidencial. Lo analizaré más a fondo mañana y te responderé.
Re: Eliminar entradas duplicadas de SQLQuery según la fecha¡Gracias por su ayuda! Me di cuenta de que había un error en mi conjunto de datos original (lo modifiqué para ingresarlo en este sitio web y anonimizar los datos). Este código ha funcionado bien. Me comunicaré con usted si tengo alguna otra pregunta.Re: Eliminar entradas duplicadas de SQLQuery según la fechaUna última pregunta: ¿cómo puedo agregar dónde se extraen más columnas de la Tabla 2 en la tabla de consulta final, incluso si no las estoy usando como criterio de coincidencia?
Intenté agregar una columna t2."wt%" en el código anterior, pero ahora el código me arroja un error. Tengo otras columnas que me gustaría extraer al mismo tiempo (aproximadamente 10 columnas en total), pero no estoy seguro de cómo hacerlo sin obtener un error.
¡Gracias!
Re: Eliminar entradas duplicadas de SQLQuery según la fecha¿Qué error estás recibiendo?
Deberían ir dentro de la parte SQL personalizada (lo probé y funcionó bien con t2."wt%")
CustomSQL(
"\[SELECT
t1.Cylinder,
t1.Batch,
t1."Batch Date",
t2."Received Date",
t2.Supplier,
t2.Lot,
t2."wt%"
FROM t1
LEFT OUTER JOIN t2 ON
t1.Cylinder = t2.Cylinder
AND t1."Batch Date" >= t2."Received Date"
]\")
Si desea todas las columnas de t2, creo que el SQL JMP utiliza soporte para t2.*