Entfernen Sie doppelte Einträge aus SQLQuery basierend auf dem DatumHallo,
Ich habe versucht, mithilfe des unten verlinkten Videos die SQLQuery-Funktion zu nutzen. Allerdings tritt ein Problem auf.
community.jmp.com/t5/video/gallerypage/video-id/tvcW9lZTE6Ie3IFXxeru0AYNqvj5AB5r
Problem: Nehmen Sie Tabelle 2 mit „Zylinder“, „Empfangsdatum“ und „Charge“ und fügen Sie diese in Tabelle 1 ein, die „Charge“, „Zylinder“ und „Chargendatum“ enthält.
Ich muss eine genaue Übereinstimmung mit dem „Zylinder“ finden und dann das „Empfangsdatum“ nehmen, das dem „Chargendatum“ am nächsten kommt (Chargendatum >= Empfangsdatum).
Ich habe die Abfrage erstellt und auch den Schritt zum Erstellen eines numerischen Tags ausgeführt, das theoretisch nur eine eindeutige Chargennummer für jede Charge bereitstellen sollte (nicht in der Tabelle unten angezeigt).
Das ist jedoch, was ich bekomme
| Charge | Batch-Datum | Zylindernummer | Chargennummer | Empfangsdatum |
| 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 |
Es sollte nur 1 Zeile aus der Abfrage ausgefüllt werden (sollte die letzte Zeile vom 30.11.2022 sein); die anderen sind „Geister“, da wir nur 1 „Charge 1“ erstellt haben
Gibt es irgendwelche Hilfestellungen, wie man den SQL-Code verbessern kann, um doppelte Einträge zu vermeiden und den Eintrag nur auszuwählen, wenn das Empfangsdatum am nächsten <= Batch-Datum liegt?
Dies war der Code aus der SQLQuery-Schnittstelle, der angegeben wurde
SELECT DISTINCT t1.Charge, t1.Chargendatum AS Datum, t1.Zylindernummer,
t2.Lot_Number, t2.Cylinder_Number AS "Zylindernummer 2", t2.Lot_Date AS "Datum 2", MIN(t2."Batch Num") AS "Minimum-Batch Num"
VON "Tabelle 1" t1
LEFT OUTER JOIN "Tabelle 2" t2
EIN ( ( t1.Zylindernummer = t2.Zylindernummer ) UND ( t1.Kat.Datum >= t2.Losdatum ) )
GRUPPE NACH t1.Charge, t1.Chargendatum, t1.Zylindernummer,
t2.Losnummer, t2.Zylindernummer, t2.Losdatum;
Automatisierung und SkriptingBetreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumSind das JMP-Tabellen, für die Sie die SQL-Abfrage durchführen? Können Sie die Tabellen freigeben?
Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumHier sind die Dateien – entschuldigen Sie, ich wollte diese anhängen.
Tabelle 1-1 und Tabelle 2-2 sind wie oben beschrieben.
Die Abfrageergebnisse zeigen die endgültige Tabelle, in der für jeden Stapel mehrere Einträge vorhanden sind (es sollte jedoch, wie oben beschrieben, nur ein Eintrag pro Stapel vorhanden sein).
Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumHabe gerade mit den Dateien auf den Hauptthread geantwortet, danke für die Kontaktaufnahme
Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumDies ist ziemlich nahe an der Grenze dessen, was ich mit den begrenzten SQL-Fähigkeiten von JMP versuchen würde (zumindest bei Verwendung von Datentabellen). Es ist höchstwahrscheinlich einfacher, SQL + JSL zu verwenden
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;Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumHallo - danke für die schnelle Hilfe! Ich habe das Makro ausprobiert und leider behält es für einige Elemente das älteste mögliche Datum bei. Dies scheint jedoch nicht für alle Einträge zu gelten (siehe letzte Zeile der Tabelle unten).
Es ist also definitiv eine Verbesserung, dass nicht mehrere Zeilen für dieselbe Charge vorhanden sind, es wird jedoch nicht immer das richtige Los/Empfangsdatum für die betreffende Charge abgerufen.
Beispiel
| Zylinder | Charge | Batch-Datum | Empfangsdatum | Anbieter | Viel | | Datum des Erhalts |
| 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 | | (Datei ist korrekt) |
Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumIch bin mir nicht ganz sicher, wie ich Ihre Tabelle lesen soll. Wenn ich mir Tabelle 2-2 anschaue, gibt es nur eine Zeile für Zylinder 1 mit dem Empfangsdatum 20.05.2022

Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumHallo – ich antworte, um das Thema aktiv zu halten. Ich glaube, es ist etwas passiert, als ich meine Datei aktualisiert habe, um geschützte Informationen zu entfernen. Ich werde mir das morgen genauer ansehen und mich mit einer Antwort bei Ihnen melden.
Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumVielen Dank für diese Hilfe! Mir ist aufgefallen, dass in meinem ursprünglichen Datensatz ein Fehler aufgetreten ist (ich habe ihn für die Eingabe auf dieser Website geändert, um die Daten zu anonymisieren). Dieser Code hat gut funktioniert. Bei weiteren Fragen werde ich mich an Sie wenden.Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumEine letzte Frage: Wie kann ich hinzufügen, dass weitere Spalten aus Tabelle 2 in die endgültige Abfragetabelle übernommen werden, auch wenn ich sie nicht als Übereinstimmungskriterien verwende?
Ich habe versucht, in Ihren Code oben eine t2."wt%"-Spalte einzufügen, aber der Code gibt jetzt einen Fehler aus. Ich habe andere Spalten, die ich gleichzeitig einfügen möchte (insgesamt etwa 10 Spalten), bin mir aber nicht sicher, wie ich das machen soll, ohne einen Fehler zu erhalten.
Danke schön!
Betreff: Entfernen doppelter Einträge aus SQLQuery basierend auf dem DatumWelchen Fehler erhalten Sie?
Sie sollten in den benutzerdefinierten SQL()-Teil gehen (ich habe es versucht und es hat mit t2."wt%") problemlos funktioniert.
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"
]\")
Wenn Sie alle Spalten aus t2 möchten, unterstützt das von JMP verwendete SQL meiner Meinung nach t2.*