Newsgroup: it.comp.appl.access
Titolo: Come ottenere recordset con solo prima riga ogni gruppo

Ho una tabella con colonne Dalla_Data, Targa, Licenza
Quando necessario inserisco una nuova riga per indicare che da una certa 
Dalla_Data in avanti la Targa indicata e' associata alla Licenza
Il campo Dalla_Data puo' essere ovviamente maggiore della data odierna
Ad esempio potrebbero esserci dele righe simili:
 
30/05/2016, PD_678901, LIC_111111111
30/05/2016, PD_123456, LIC_222222222
15/04/2016, PD_678901, LIC_333333333
15/04/2016, PD_123456, LIC_444444444
01/04/2016, VE_678901, LIC_DEFG
01/04/2016, PD_123456, LIC_ABCD
01/01/2016, VE_678901, LIC_GGGGGGG
01/01/2016, PD_123456, LIC_hhhhhhhhhhhh
 
Bene, oggi siamo il 18/04/2016 quindi le informazioni che la query 
desiderata dovrebbe restituire sono quelle relative al Dalla_Data del 
15/04/2016:
 
15/04/2016, PD_678901, LIC_333333333
15/04/2016, PD_123456, LIC_444444444
 
Come fare per ottenere una query di questo tipo?
In sostanza devo, dopo aver selezionato solo le righe con Dalla_Data 
inferiore/uguale alla data odierna, raggruppare tutte le righe della 
stessa targa, ordinando in modo inverso per campo Dalla_Data, in modo da 
far 'galleggiare' le righe richieste in ogni gruppo, poi dovrei 
selezionare solo la prima riga di ogni gruppo
E su quest'ultima condizione, la visualizzazione di solo le 'prime 
righe' di ogni gruppo non riesco a tirarla fuori
Come fareste ?
Ciao e grazie
RobertoA
 
 
 

RobertoA submitted this idea :

SELECT TOP 1 ...
 
Bruno


Ritornerebbe solo il primo dei record
E non e' quello che mi serve
Mi serve il primo DI OGNI GRUPPO (Targa)
 
 

>>>>  
http://www.bb2002.it
 :)  <<<<<
........... [ al lavoro ] ...........

 filtrata per essere <= data odierna
 
Si, la selezione di parte delle righe limitando la data deve essere 
fatta, ovviamente
Dopo la prima scrematura pero', raggruppando per targa, ed ordinando per 
data, vorrei selezionare solo la prima riga di ogni targa
E questo ancora non mi viene, la restituzione di un recordset contenente 
solo le prime righe di ogni 'gruppo targa'
 

Come fare per ottenere una query di questo tipo?
 
1) - L'esempio che dai non evidenzia alcun
     raggruppamento per targa.
2) - Evidenzia un raggruppamento per singola data e non per
     data <= alla data corrente come poi hai confermato.
3) - La sfera di cristallo io l'ho ordinata, pagata
     ma ancora non mi è stata recapitata.
4) - Nel frattempo dovrò evitare di dire cavolate.
 
Bruno


Ringrazio innanzitutto per l'interesse al 3d e per il tempo speso, e mi 
scuso se rompo le balle con quesiti forse banali per i piu' esperti
 
Con 'raggruppamento' intendevo dire che:
- dopo aver eliminato le righe con DALLA_DATA maggiore alla data odierna
- mi serve raggrupparle per TARGA, in ordine decrescente di DALLA_DATA 
(piu' recente in altro)
- poi per ogni 'gruppo' (di righe con la stessa TARGA) mi serve prendere 
la riga piu' in alto (quella con DALLA_DATA piu' vicina alla data odierna)
 
In sostanza mi serve una query che, dato queste righe
30/05/2016, PD_678901, LIC_111111111
30/05/2016, PD_123456, LIC_222222222
15/04/2016, PD_678901, LIC_333333333
15/04/2016, PD_123456, LIC_444444444
01/04/2016, VE_678901, LIC_DEFG
01/04/2016, PD_123456, LIC_ABCD
01/01/2016, VE_678901, LIC_GGGGGGG
01/01/2016, PD_123456, LIC_hhhhhhhhhhhh
 
mi restituisca queste (supposto che la data odierna sia 18/04/2016)
15/04/2016, PD_678901, LIC_333333333
15/04/2016, PD_123456, LIC_444444444
 
Tradotto in letterale "...ho una lista di associazioni 
data/targa/licenza, OGGI vorrei vedere una lista completa SOLO delle 
licenze attualmente in vigore..."
 
Da tener presente che la lista di associazioni prevede anche righe con 
data maggiore alla data odierna
 
Se per 'sfera di cristallo in arrivo' intendi dire che non ho spiegato 
bene il problema, spero con lo scritto sopra di averlo dettagliato 
adeguatamente, altrimenti la interpreto come una battuta nel senso che 
anche tu non conosci la soluzione al problema
Ciao
 


Cosi sembra andare
 
SELECT ASS.DALLA_DATA AS DATA, ASS.TARGA AS TARGA, ASS.LICENZA AS LIC
FROM ASS
WHERE ASS.DALLA_DATA <= #04/18/2016# and
(SELECT COUNT(*) FROM ASS AS p
WHERE p.TARGA = ASS.TARGA and p.DALLA_DATA > ASS.DALLA_DATA and 
p.DALLA_DATA <= #04/18/2016#)=0