Estrarre Record Casualmente

  • Creatore Discussione Creatore Discussione Matt36
  • Data di inizio Data di inizio

Matt36

Nuovo Utente
2 Set 2009
6
0
0
Salve a tutti
Ho una tabella in Acces dalla quale devo estrarre in modo casuale un certo numero di record coem posso fare?

grazie in anticipo
 
Codice:
select * from tabella order by rnd(id)
id deve essere numerico (ti consiglio di usare la chiave primaria numerica (es. contatore) della tabella). Prendi i primi N record della tabella che ti servono (saranno sempre diversi) quando effettui il ciclo di lettura. Puoi anche mettere un where se ti serve.
 
avrei una piccola necessita i record sono idicizzati secondo un id numerico poi ho un codice da controllare di 5 caratteri

XXYYY

XX = Numero che si puo ripetere
YYY = Numero che non si puo ripetere

intendo per esempio

10375
10358
10375

deve diventare
10375
10358

quindi ricapitolando devo estrarre dalla prima tabella 29 record di cui questo codice non si deve ripetere
 
avrei una piccola necessita i record sono idicizzati secondo un id numerico poi ho un codice da controllare di 5 caratteri

XXYYY

XX = Numero che si puo ripetere
YYY = Numero che non si puo ripetere

intendo per esempio

10375
10358
10375

deve diventare
10375
10358

quindi ricapitolando devo estrarre dalla prima tabella 29 record di cui questo codice non si deve ripetere

Secondo me Access non è in grado di risolvere una query così complessa. Io risolverei questa cosa con una procedura.
Codice:
SELECT * FROM tabella WHERE id IN 
(
    SELECT id FROM tabella t WHERE RIGHT(campo,3) NOT IN 
    (
        SELECT RIGHT(campo,3) FROM tabella t2 WHERE t2.id<t.id
    ) 
)
ORDER BY RND(id)
L'ho scritta di getto e potrebbe essere sbagliata. Studiandoci un po' su forse mi viene in mente una query migliore, ma come già detto, potrebbe non riuscirla a gestire Access.
(ho ipotizzato che codice sia un campo stringa)
 
Mi spieco meglio
IdPratica Frazionario NumProtocollo NumeroConto TipoLavorazione DataRichiesta DataArrivo DataInizioLavorazione StatoLavorazione nominativo DataFineLavorazione Annullata
sono i campi della tabella


La tabella è indicizata con idPratica
esempio

10 1350 8768761816 ecc----
11 1375 8768761816 ecc----
12 2750 8768761816 ecc----
13 1310 8768761816 ecc----
14 2750 8768761816 ecc----
15 1370 8768761816 ecc----
16 1550 8768761816 ecc----
17 1512 8768761816 ecc----
18 1550 8768761816 ecc----

da un elenco del genre devo estrapolare
N record nei quali Frazionario non si puo ripetere
 
Ultima modifica:
Codice:
SELECT * FROM tabella WHERE idPratica IN 
(
    SELECT idPratica FROM tabella t WHERE frazionario NOT IN 
    (
        SELECT frazionario FROM tabella t2 WHERE t2.idPratica<t.idPratica
    ) 
)
ORDER BY RND(idPratica)
Se la query funziona ti basta cambiare il nome della tabella e nel ciclo che fai prendere i primi N record.
Se vuoi mettere N nella query (es. N=100) la prima riga diventa:
Codice:
SELECT TOP 100 * FROM tabella WHERE idPratica IN
 
Aggiungo una cosa degli estratti devono tutti inizare con un certo codice che gli do io

PS

NN capico cosa sono t2 e t
 
Ultima modifica:
Aggiungo una cosa degli estratti devono tutti inizare con un certo codice che gli do io
Cambi la parte centrale della query così:
Codice:
SELECT idPratica FROM tabella t WHERE frazionario NOT IN 
    (
        SELECT frazionario FROM tabella t2 WHERE t2.idPratica<t.idPratica
    ) 
    [COLOR="Red"]AND frazionario LIKE 'abc%'[/COLOR]
(prende i codici che iniziano per 'abc')

NN capico cosa sono t2 e t
Ho rinominato per comodità i nomi delle tabelle (temporaneamente).
 
Codice:
SELECT idPratica FROM [COLOR="Red"]tabella t[/COLOR] WHERE frazionario NOT IN 
    (
        SELECT frazionario FROM [COLOR="Red"]tabella t2[/COLOR] WHERE t2.idPratica<t.idPratica
    ) 
AND frazionario LIKE 'abc%'

Devo creare due nuove tabelle?
 

Discussioni simili