Utiliser la date maximale pour interrogerBonjour,
J'ai un fichier qui est mis à jour chaque semaine en fonction de la date maximale dans la colonne date. Chaque semaine, j'ouvre le fichier, regarde la date maximale actuelle, puis interroge les données postérieures à la date maximale. Serait-il possible de simplement extraire la date maximale et de l'insérer dans la requête que j'utilise ?
Actuellement, mon fichier est mis à jour au 15/08/2019 et je souhaite interroger les données > 15/08/2019 pour mettre à jour le fichier.
Re : Utiliser la date maximale pour interroger@pmroz
Merci pmroz. Code simple et simple. Très utile.
Re : Utiliser la date maximale pour interrogerSi vous utilisez Oracle, vous pouvez envisager d'utiliser TO_DATE sur votre champ de date afin que le format de date soit sans ambiguïté.Si vous utilisez SQL Server, aaaa-mm-jj est le format par défaut, aucune conversion n'est donc nécessaire.
dv = today();
dvf = Format( dv, "yyyy-mm-dd" );
sql = Eval Insert( "select * where purchase_date > TO_DATE('^dvf^', 'yyyy-mm-dd')" );
show(sql);Re : Utiliser la date maximale pour interrogerSalut Brian,
En fait, j'ai pu le faire fonctionner en modifiant les lignes que vous avez déjà fournies. Je viens d'ajouter une ligne supplémentaire à la partie val pour inclure les guillemets simples. Val mis à jour avec des guillemets simples ci-dessous, n'hésitez pas à critiquer si nécessaire.
val = Column( 1 )[1];
dv = As Date( val );
dvf = Format( dv, "yyyy-mm-dd" );
dvfs = ("'" || dvf || "'");
Show( dvfs );
sql = Eval Insert( "select * where purchase_date > ^dvfs^" );
Re : Utiliser la date maximale pour interrogerSalut Brian,
Je souhaite ajouter des guillemets simples autour de la date (nécessaire pour interroger une base de données particulière). Vais-je simplement ajouter le guillemet simple directement à l'évaluation ?
Exemple:
sql = Eval Insert( "select * where purchase_date > '^dvf^'" );
Re : Utiliser la date maximale pour interrogerEn modifiant mon exemple précédent, vous pourriez faire :
val = Column( 1 )[1];
dv = As Date( val );
dvf = Format( dv, "m/d/y" );
Show( dvf );
sql = Eval Insert( "select * where purchase_date > ^dvf^" );
Show( sql );
Re : Utiliser la date maximale pour interrogerMerci Brian, cela fonctionne comme prévu. Est-il possible de reformater le val dans un format numérique (tel que 31/12/2010 ou 31/12/2010) ? Avoir un caractère tel que Dec dans la date ne fonctionne pas pour ma requête.
Re : Utiliser la date maximale pour interrogerEn reprenant mon exemple précédent, si vous continuez avec :
val = Colonne( 1 )[1];
show(val);
Afficher( Comme Date( val ) );
sql = eval insert("select *where date_achat > ^Comme date(val)^");
afficher(sql);
Ensuite, le journal affiche :
val = 3376598400 ;
Comme Date(val) = 31 décembre 2010 ;
sql = "select * où date_achat > 31 décembre 2010" ;
afin que vous puissiez ensuite exécuter le SQL résultant.
Re : Utiliser la date maximale pour interrogerSeriez-vous en mesure de montrer comment vous inséreriez la date maximale dans le prochain SQL à partir de la première table ?
La table que j'utilise comporte une colonne intitulée Purchase_Date, sur laquelle je ferais le maximum pour interroger de nouvelles données de la base de données. Un exemple de requête est ci-dessous :
dbc = créer une connexion à la base de données ( "DSN=PROD; UID=" ||IDC|| " ;PWD= " ||PASS|| " ;MODE=PARTAGE;DBALIAS=PROD" );
données_sql = evalinsert ( "
Sélectionnez CUST_NM, PURCHASE_AMT, PURCHASE_DATE, PURCHASE_TM, ORDER_NUM, PRODUCT_NM, PRODUCT_TYP, COUNTRY_CD, APPROVE_DECLINED.
de PURCHASE_DATA
où PURCHASE_DATE > '2019-08-16'
et PRODUIT_TYP = 'Y'
et COUNTRY_CD dans ('0840')
et APPROVE_DECLINED ='A'" );
données_dt = exécuter SQL (dbc, data_sql);
fermer la connexion à la base de données (dbc);
Re : Utiliser la date maximale pour interrogerSans connaître les détails, il semble que vous devriez pouvoir conserver tout cela dans une seule requête.Cependant, vous pouvez toujours utiliser Query Builder pour effectuer un Max sur la table en question avec les dates, puis extraire cette valeur pour la remplacer dans un autre morceau de script SQL.Un exemple de script de Query Builder travaillant sur la base de données de films, table Rentals où la colonne de date contient la date de location, le script émis ressemblerait à :
New SQL Query(
Connection( "ODBC:DSN=SQLServer SQBTest;UID=sa;PWD=%_PWD_%;APP=JMP;WSID=machine;DATABASE=SQBTest;" ),
QueryName( "g6_Rentals" ),
Select(
Column(
"OrderDate",
"t1",
Alias( "Maximum-OrderDate" ),
SavedJMPName( "OrderDate" ),
Aggregation( "Maximum" ),
JMP Name( "Maximum-OrderDate", 0 ),
Numeric Format( "m/d/y", "-1", "NO", "" )
)
),
From( Table( "g6_Rentals", Schema( "SQBTest" ), Alias( "t1" ) ) )
) << Run Foreground();
val = Column( 1 )[1];
Show( As Date( val ) );
Ici, nous faisons simplement un agrégat de maximum sur la colonne de date.Le tableau résultant comporte une ligne et une colonne, et nous en retirons la valeur et la montrons dans le journal pour nous assurer qu'elle est correcte.
Brian Corcoran
Développement JMP