Newsgroup: it.comp.lang.visual-basic
Titolo: recordsource sql con data maggiore

ho una tabella abbonamenti con un campo attivo bollean un campo idallievo e 
un campo datascadenza
 
 
dovrei prelevare il record con con questi criteri
attivo=-1 and idallievo=id and (data scadenza maggiore)
 
come potrei fare?
 
grazie. 
 

Dopo dura riflessione, tmtube ha scritto :

Prova a chiederlo in italiano, scritto cosï¿œ non si capisce cosa tu 
voglia ottenere...
 
Alberto
 
 

 grazie.

forse ho scritto velocemente
ora scrivo in italiano (ci provo)
 
vorrei il record con campo attivo=-1 e idallievo=mioid e datascadenza (la 
maggiore presente nella tabella che rispetta anche gli altri 2 criteri)
 
piu chiaro ora?
 
:)
 

Sembra che tmtube abbia detto :

No.
 
Provo io ad esplicitare il dubbio, visto che da solo sei in difficoltï¿œ:
Vuoi il record identificato dalla data maggiore, o vuoi conoscere la 
maggior data fra i record che rispondono ad un dato criterio?
 
Provo anche ad anticipare entrambe le risposte, anche se i thread "a 
doppio binario" mi hanno sempre infastidito.
 
Se vuoi il record identificato dalla maggior data, devi ovviamente 
ammettere l'indeterminatezza del risultato, a meno che tu non abbia 
imposto un vincolo unique sulla combinazione idallievo+datascadenza 
(vincolo di dubbia performance oltre che di dubbia realizzabilitï¿œ 
concreta). Questo perchï¿œ puï¿œ sempre esistere il caso in cui due record 
dello stesso allievo abbiano la stessa datascadenza. Accettando, 
quindi, che il risultato sia aleatorio, si fa
SELECT TOP(1) *
FROM TABELLA
WHERE CAMPOATTIVO <> 0
AND IDALLIEVO = MIOID
ORDER BY DATASCADENZA DESC
 
Non ti ho detto niente di diverso dalla risposta precedente di mmm, 
quindi probabilmente non ï¿œ questa la giusta risposta, altrimenti non 
avresti chiesto ulteriormente.
 
Da notare fra le altre cose che confrontare un boolean con 1 o -1 ï¿œ una 
mezza porcheria stilistica, implicando una conversione implicita o in 
un senso o nell'altro. I boolean si confrontano con Campo=0 (false) o 
Campo<>0 (true).
 
Altra nota, non tutti i dbms concepiscono il Top(1) come "un record", 
ma lo trattano come il With Ties di Sql-Server, ossia in caso di paritï¿œ 
fra due record te li estraggono entrambi. Tu perï¿œ non dici che dbms 
utilizzi, quindi altro non ti si puï¿œ dire.
 
Se invece vuoi la maggior data di scadenza, e a questo punto avresti un 
risultato deterministico, si fa
SELECT
 MAXDATA = MAX(DATASCADENZA)
FROM TABELLA
WHERE CAMPOATTIVO <> 0
AND IDALLIEVO = MIOID
 
Alberto
 
 

Alberto
 
 
Scusa l'ignoranza o i limiti nei neuroni ma non capisco la differenza fra i 
2 esempi
se l'allievo pippo ha un abbonamento attivo con data scadenza 15/07/2013 e 
un altro abbonamento attivo con data scadenza 21/07/2013 io voglio che venga 
restituita la data 21/07/2013 se invece ha piï¿œ abbonamenti attivi con stessa 
data scadenza
 
esempio
pippo abbonamento attivo con data scadenza 15/07/2013
pippo secodno abbonamento attivo con data scadenza 21/07/2013
pippo terzo abbonamento attivo con data scadenza 21/07/2013
voglio che mi restituisca la data 21/07/2013
 
quale dei 2 devo usare? :) TOP(1) o MAX(DATASCADENZA)
 
Grazie. 
 

 quale dei 2 devo usare? :) TOP(1) o MAX(DATASCADENZA)
 
Mettiamola così:
Col MAX ottieni la data, e morta lì.
Col Top(1) ottieni anche i dati di QUALE abbonamento sia quello che ti 
comporta quella data.
 
Esempio:
pippo abbonamento attivo con data scadenza 15/07/2013
pippo secodno abbonamento attivo con data scadenza 21/07/2013
pippo terzo abbonamento attivo con data scadenza 21/07/2013
 
Col Max ottieni 21/07/2013 e basta.
 
Col Top(1) ottieni
pippo secodno abbonamento attivo con data scadenza 21/07/2013
 
quindi scopri anche quale dei tre abbonamenti ti porta fino al 
21/07/2013. In alcuni dbms otterresti entrambi i record, ossia 
otterresti
pippo secodno abbonamento attivo con data scadenza 21/07/2013
pippo terzo abbonamento attivo con data scadenza 21/07/2013
 
(cosa che otterresti anche in SqlServer aggiungendo "With Ties" alla 
fine).
 
Si tratta comunque di questioni concettuali NON legate a visual-basic, 
e neanche strettamente all'uso dei db, quanto piuttosto all'informatica 
in generale. Ti consiglio di approfondire col tuo docente queste cose, 
prima di proseguire con lo studio di questioni più evolute.
 
 
Alberto
 
 

Alberto
 
Grazie mille tutto molto chiaro.