Supprimer les entrées en double de SQLQuery en fonction de la dateBonjour,
J'ai essayé d'utiliser cette vidéo liée ci-dessous pour utiliser la fonction SQLQuery. Cependant, j'ai un problème.
community.jmp.com/t5/video/gallerypage/video-id/tvcW9lZTE6Ie3IFXxeru0AYNqvj5AB5r
Problème : prenez le tableau 2 avec « cylindre », « Date de réception » et « lot » et fusionnez-les dans le tableau 1 qui contient « lot », « cylindre » et « Date de lot »
Je dois faire correspondre exactement le « Cylindre », puis prendre la « Date de réception » la plus proche de la « Date du lot » (Batch_Date >= Received_Date).
J'ai créé la requête et également effectué l'étape de création d'une balise numérique qui devrait théoriquement fournir un seul numéro de lot unique pour chaque lot (non indiqué dans le tableau ci-dessous)
Cependant, c'est ce que je reçois
| Lot | Date du lot | Numéro de cylindre | Numéro de lot | Date de réception |
| 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 |
Il ne devrait y avoir qu'une seule ligne renseignée à partir de la requête (devrait être la dernière ligne le 30/11/2022) ; les autres sont des « fantômes » car nous n'avons créé qu'un seul « Lot 1 »
Une aide sur la façon d'améliorer le code SQL pour éviter les entrées en double et sélectionner l'entrée uniquement si la date de réception est la plus proche <= date du lot ?
C'était le code de l'interface SQLQuery qui a été donné
SÉLECTIONNEZ DISTINCT t1.Batch, t1.Batch_Date AS Date, t1.Cylinder_Number,
t2.Lot_Number, t2.Cylinder_Number AS "Numéro_cylindre 2", t2.Lot_Date AS "Date 2", MIN(t2."Numéro de lot") AS "Numéro de lot minimum"
DE "Tableau 1" t1
JOINTURE EXTERNE GAUCHE "Table 2" t2
SUR ( ( t1.Cylinder_Number = t2.Cylinder_Number ) ET ( t1.Cat_Date >= t2.Lot_Date ) )
GROUP BY t1.Lot, t1.Date_Lot, t1.Numéro_Cylindre,
t2.Numéro_de_lot, t2.Numéro_de_cylindre, t2.Date_de_lot;
Automatisation et scriptsRé: Supprimer les entrées en double de SQLQuery en fonction de la dateS'agit-il de tables JMP sur lesquelles vous effectuez la requête SQL ? Pouvez-vous partager les tables ?
Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateVoici les fichiers - désolé, je voulais les joindre.
Les tableaux 1-1 et 2-2 sont tels que décrits ci-dessus.
Les résultats de la requête affichent la table finale dans laquelle se trouvent plusieurs entrées pour chaque lot (mais il ne doit y avoir qu'une seule entrée par lot comme décrit ci-dessus).
Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateJe viens de répondre au fil de discussion principal avec les fichiers, merci de m'avoir contacté
Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateC'est assez proche de la limite de ce que je tenterais de faire avec les capacités SQL limitées de JMP (au moins lors de l'utilisation de tables de données). Il est probablement plus simple d'utiliser 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;Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateBonjour, merci pour votre aide rapide ! J'ai essayé la macro et malheureusement, pour certains éléments, elle conserve la date la plus ancienne possible. Cependant, elle ne semble pas le faire pour toutes les entrées (voir la dernière ligne du tableau ci-dessous).
Il s'agit donc d'une nette amélioration dans la mesure où il n'y a pas plusieurs lignes pour le même lot, mais le bon lot/la bonne date de réception n'est pas systématiquement extrait pour le lot en question.
Exemple
| Cylindre | Parcelle | Date du lot | Date de réception | Fournisseur | Parcelle | | Date de réception prévue |
| 8 | 2273 | 09/08/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 | | (le fichier est correct) |
Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateJe ne sais pas vraiment comment lire votre tableau. Si je regarde le tableau 2-2, il n'y a qu'une seule ligne pour le cylindre 1 qui a la date de réception 20/05/2022

Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateBonjour, je réponds pour garder le sujet actif. Je pense qu'il s'est passé quelque chose lorsque j'ai mis à jour mon fichier pour supprimer des informations confidentielles. Je vais y jeter un œil demain et je vous répondrai.
Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateMerci pour cette aide ! J'ai réalisé qu'il y avait une erreur dans mon ensemble de données d'origine (je l'ai modifié pour l'entrée sur ce site Web afin d'anonymiser les données). Ce code fonctionne bien, je vous contacterai pour toute autre question.Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateUne dernière question : comment puis-je ajouter des colonnes supplémentaires extraites de la table 2 dans la table de requête finale, même si je ne les utilise pas comme critère de correspondance ?
J'ai essayé d'ajouter dans votre code ci-dessus une colonne t2."wt%" mais le code me renvoie maintenant une erreur. J'ai d'autres colonnes que j'aimerais extraire en même temps (environ 10 colonnes au total) mais je ne sais pas comment faire sans obtenir d'erreur.
Merci!
Ré: Supprimer les entrées en double de SQLQuery en fonction de la dateQuelle erreur obtenez-vous ?
Ils devraient aller dans la partie Custom SQL() (je l'ai essayé et cela a très bien fonctionné avec le 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 vous voulez toutes les colonnes de t2, je pense que le JMP SQL utilisé prend en charge t2.*