- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- [SQL] Ordinare i record in base al confronto di due date
-
[SQL] Ordinare i record in base al confronto di due date
ciao a tutti!
ho il problema di ordinare i dati provenienti da una query SQL in una tabella (...che fin qui sembra banale!), tuttavia (almeno a quanto so io!) non posso ordinarli direttamente dalla SELECT SQL perchè l'ordinamento si basa su un campo calcolato a partire dalla base dati.
Mi spiego meglio, nella base dati ho il campo data inizio e data approvazione, quando effettuo la query in automatico la pagina asp calcola la data scadenza a partire dalla data inizio o dalla data approvazione + xx giorni. La tabella che ne risulta deve essere ordinata per data di scadenza!
I dati della query sql li appoggio subito in un array per poter fare la paginazione dei risultati stessi. Ora non so come posso ordinare questa tabella!
Aspetto soccorso!!!!!
Grazie,Marco
-
o aggiungi un campo "data_scadenza" o riversi i risultati in una tabella temporanea e li riordini........
sempre se ho capito bene il problema ....
-
hai capito perfettamente e ti ringrazio del consiglio...volevo proprio evitare sia il campo data_scadenza (in quanto è un campo calcolato al volo) sia di dover riversare su un'altra tabella...
ma in questa seconda ipotesi tu come faresti?
grazie!Marco
-
select (data_inizio + 20) AS Scadenza from tabella order by (data_inizio + 20) DESC;
Dovrebbe funzionare...
-
ciao Paolo!
grazie per il suggerimento...il problema è che, oltre al problema del +xx giorni, l'ordinamento va fatto su due colonne congiuntamente in questo modo:
ID COLONNA1 COLONNA2
1 01/01/2007
2 05/04/2007
3 02/03/2007 01/11/2007
4 31/12/2006il corretto ordine è: 3,4,1,2!
so che è un gran caos...
grazie!!Marco
-
Bel casino!
Comunque la soluzione esiste ed è questa (l'ho testata):
SELECT tbldate.id_campo, **IIf(not IsNull([data2] and data1>data2),[data2]+20,[data1]+20) **AS Scadenza FROM tbldate ORDER BY **IIf(not IsNull([data2] and data1>data2),[data2]+20,[data1]+20)**;
Tutto questo nell'ipotesi che:
- Data1 (cioè colonna1) sia sempre NOT NULL e Data2 può assumere valori NULL
- Se Data2 esiste allora deve essere data1>data2
- Il time-out della scadenza sia di 20 giorni.
Come ho già detto in post precedenti all'interno dell'SQL di Access si possono fare cose molto potenti, basta studiare tutte le funzioni elencate nel generatore di espressioni attivabile cliccando sulla "bacchetta magica" che appare nella barra degli strumenti di "Visualizzazione struttura della Query".
Suggerimento: Per velocizzare l'esecuzione della query verifica che su Data1 e Data2 sino entrambi campi che accettano valori Null e che siano indicizzati (Valori duplicati: si!)
PS: C'è un errore nella tabella che hai presentato, probabilmente il valore di colonna2 del terzo record è 01/11/200**6 **altrimenti non ha senso l'ordine: 3,4,1,2
-
...in effetti era 2006!!!
grazie Paolo, ti adoro!funziona a meraviglia...ora per le prossime provo anch'io con la bacchettina magica di Access!!
Marco
-
@sherlock said:
...in effetti era 2006!!!
grazie Paolo, ti adoro!
esagerato!...funziona a meraviglia...ora per le prossime provo anch'io con la bacchettina magica di Access!!
...ecco bravo!