Utilizzo della data massima da interrogareCiao,
Ho un file che viene aggiornato settimanalmente in base alla data massima nella colonna della data. Ogni settimana apro il file, guardo la data massima attuale e quindi interrogo i dati successivi alla data massima. Sarebbe possibile semplicemente estrarre la data massima e inserirla nella query che sto utilizzando?
Attualmente il mio file è aggiornato al 15/8/2019 e vorrei interrogare i dati > 15/8/2019 per aggiornare il file.
Ri: Utilizzo della data massima da interrogare@pmroz
Grazie pmroz. Codice semplice e semplice. Molto utile.
Ri: Utilizzo della data massima da interrogareSe utilizzi Oracle potresti prendere in considerazione l'utilizzo di TO_DATE nel campo della data in modo che il formato della data non sia ambiguo.Se utilizzi SQL Server aaaa-mm-gg è il formato predefinito, quindi non è necessaria alcuna conversione.
dv = today();
dvf = Format( dv, "yyyy-mm-dd" );
sql = Eval Insert( "select * where purchase_date > TO_DATE('^dvf^', 'yyyy-mm-dd')" );
show(sql);Ri: Utilizzo della data massima da interrogareCiao Brian,
In realtà sono riuscito a farlo funzionare modificando le righe che hai già fornito. Ho appena aggiunto una riga in più alla porzione val per includere le virgolette singole. Valore aggiornato con virgolette singole di seguito, sentiti libero di criticare se necessario.
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^" );
Ri: Utilizzo della data massima da interrogareCiao Brian,
Voglio aggiungere virgolette singole attorno alla data (necessarie per eseguire query da un particolare DB). Aggiungerei semplicemente la virgoletta singola direttamente alla valutazione?
Esempio:
sql = Eval Insert( "select * where purchase_date > '^dvf^'" );
Ri: Utilizzo della data massima da interrogareModificando il mio esempio di prima, potresti fare:
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 );
Ri: Utilizzo della data massima da interrogareGrazie Brian, funziona come previsto. È possibile riformattare la val in un formato numerico (ad esempio 31/12/2010 o 31/12/2010)? Avere un carattere come Dec nella data non funziona per la mia query.
Ri: Utilizzo della data massima da interrogareUsando il mio esempio precedente, se continui con:
val = Colonna( 1 )[1];
mostra(val);
Mostra (come data (val));
sql = eval insert("seleziona * dove data_acquisto > ^As Data(val)^");
mostra(sql);
Quindi il registro mostra:
val=3376598400;
Come data (val) = 31 dicembre 2010;
sql = "seleziona * dove data_acquisto > 31 dicembre 2010";
in modo da poter eseguire il file sql risultante.
Ri: Utilizzo della data massima da interrogareSaresti in grado di mostrare come inseriresti la data massima nel successivo SQL dalla prima tabella?
La tabella che sto utilizzando ha una colonna etichettata come Purchase_Date che è ciò su cui farei il massimo per interrogare nuovi dati dal database. Di seguito è riportato un esempio della query:
dbc = creare una connessione al database ( "DSN=PROD; UID=" ||IDC|| " ;PWD= " ||PASSA|| " ;MODALITÀ=CONDIVIDI;DBALIAS=PROD" );
dati_sql = evalinsert ( "
Seleziona CUST_NM, PURCHASE_AMT, PURCHASE_DATE, PURCHASE_TM, ORDER_NUM, PRODUCT_NM, PRODUCT_TYP, COUNTRY_CD, APPROVE_DECLINED
da PURCHASE_DATA
dove DATA_ACQUISTO > '2019-08-16'
e TIPO_PRODOTTO = 'S'
e COUNTRY_CD in ('0840')
e APPROVE_DECLINED ='A'" );
dati_dt = eseguire sql (dbc, dati_sql);
chiudere la connessione al database (dbc);
Ri: Utilizzo della data massima da interrogareSenza conoscere i dettagli, sembra che dovresti essere in grado di mantenere tutto questo in un'unica query.Tuttavia, puoi sempre utilizzare Query Builder per eseguire un Max sulla tabella in questione con le date, quindi estrarre quel valore per sostituirlo in un altro pezzo di script SQL.Un esempio dello script di Query Builder che lavora sul database dei film, tabella Rentals in cui la colonna della data ha la data del noleggio, lo script emesso sarebbe come:
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 ) );
Qui stiamo semplicemente eseguendo un aggregato di valori massimi nella colonna della data.La tabella risultante ha una riga e una colonna e ne prendiamo il valore e lo mostriamo al log per assicurarci che sia corretto.
Brian Corcoran
Sviluppo JMP