Verwenden des maximalen Datums zur AbfrageHallo,
Ich habe eine Datei, die wöchentlich basierend auf dem Maximaldatum in der Datumsspalte aktualisiert wird. Jede Woche öffne ich die Datei, schaue mir das aktuelle Max-Datum an und frage dann Daten ab, die nach dem Max-Datum liegen. Wäre es möglich, einfach das maximale Datum herauszuziehen und es in die von mir verwendete Abfrage einzufügen?
Derzeit ist meine Datei auf den 15.08.2019 aktualisiert und ich möchte Daten abfragen, die > 15.08.2019 sind, um die Datei zu aktualisieren.
Betreff: Maximales Datum zur Abfrage verwenden@pmroz
Danke, pmroz. Einfacher und einfacher Code. Sehr hilfreich.
Betreff: Maximales Datum zur Abfrage verwendenWenn Sie Oracle verwenden, sollten Sie die Verwendung von TO_DATE für Ihr Datumsfeld in Betracht ziehen, damit das Datumsformat eindeutig ist.Wenn Sie SQL Server verwenden, ist „JJJJ-MM-TT“ das Standardformat, daher ist keine Konvertierung erforderlich.
dv = today();
dvf = Format( dv, "yyyy-mm-dd" );
sql = Eval Insert( "select * where purchase_date > TO_DATE('^dvf^', 'yyyy-mm-dd')" );
show(sql);Betreff: Maximales Datum zur Abfrage verwendenHallo Brian,
Ich konnte es tatsächlich zum Laufen bringen, indem ich die Zeilen bearbeitet habe, die Sie bereits bereitgestellt haben. Ich habe gerade eine zusätzliche Zeile zum val-Teil hinzugefügt, um die einfachen Anführungszeichen einzuschließen. Aktualisierter Wert mit einfachen Anführungszeichen unten, bei Bedarf können Sie ihn gerne kritisieren.
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^" );
Betreff: Maximales Datum zur Abfrage verwendenHallo Brian,
Ich möchte das Datum in einfache Anführungszeichen setzen (erforderlich für die Abfrage einer bestimmten Datenbank). Würde ich das einfache Anführungszeichen einfach direkt zur Auswertung hinzufügen?
Beispiel:
sql = Eval Insert( "select * where purchase_date > '^dvf^'" );
Betreff: Maximales Datum zur Abfrage verwendenWenn Sie mein Beispiel von zuvor ändern, könnten Sie Folgendes tun:
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 );
Betreff: Maximales Datum zur Abfrage verwendenDanke Brian, das funktioniert wie erwartet. Ist es möglich, den Wert in ein numerisches Format umzuformatieren (z. B. 31.12.2010 oder 31.12.2010)? Ein Zeichen wie „Dec“ im Datum funktioniert bei meiner Abfrage nicht.
Betreff: Maximales Datum zur Abfrage verwendenWenn Sie in meinem vorherigen Beispiel fortfahren mit:
val = Column( 1 )[1];
show(val);
Show( As Date( val ) );
sql = eval insert("select * where Purchase_date > ^As Date(val)^");
show(sql);
Dann zeigt das Protokoll:
Wert = 3376598400;
As Date(val) = 31Dec2010;
sql = "select * where Purchase_date > 31.12.2010";
sodass Sie dann die resultierende SQL ausführen können.
Betreff: Maximales Datum zur Abfrage verwendenKönnten Sie zeigen, wie Sie das Max Date in die nächste SQL aus der ersten Tabelle einfügen würden?
Die Tabelle, die ich verwende, hat eine Spalte mit der Bezeichnung „Purchase_Date“, die ich maximal verwenden würde, um neue Daten aus der Datenbank abzufragen. Nachfolgend finden Sie ein Beispiel für die Abfrage:
dbc = Datenbankverbindung erstellen ( "DSN=PROD; UID=" ||IDC|| " ;PWD= " ||PASSS|| " ;MODE=SHARE;DBALIAS=PROD" );
data_sql = evalinsert ( "
Wählen Sie CUST_NM, PURCHASE_AMT, PURCHASE_DATE, PURCHASE_TM, ORDER_NUM, PRODUCT_NM, PRODUCT_TYP, COUNTRY_CD, APPROVE_DECLINED aus
von PURCHASE_DATA
wobei KAUFDATUM > '2019-08-16'
und PRODUCT_TYP = 'Y'
und COUNTRY_CD in ('0840')
und APPROVE_DECLINED ='A'" );
data_dt = SQL ausführen (dbc, data_sql);
Datenbankverbindung schließen (dbc);
Betreff: Maximales Datum zur Abfrage verwendenOhne die Einzelheiten zu kennen, scheint es, als ob Sie in der Lage sein sollten, dies alles in einer Abfrage unterzubringen.Sie können jedoch jederzeit mit Query Builder einen Max-Wert für die betreffende Tabelle mit den Datumsangaben erstellen und diesen Wert dann extrahieren, um ihn in einem anderen Teil des SQL-Skripts zu ersetzen.Ein Beispiel für das Skript von Query Builder, das an der Filmdatenbank, Leihtabelle, arbeitet, wobei die Datumsspalte das Verleihdatum enthält. Das ausgegebene Skript würde wie folgt aussehen:
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 ) );
Hier führen wir lediglich eine Aggregation des Maximums für die Datumsspalte durch.Die resultierende Tabelle besteht aus einer Zeile und einer Spalte. Wir nehmen den Wert daraus und zeigen ihn im Protokoll an, um sicherzustellen, dass er korrekt ist.
Brian Corcoran
JMP-Entwicklung