Newsgroup: it.comp.appl.access
Titolo: Select Top 3 (all'interno del campo al variare dello stesso)

Ho una tabella Turni con 2 campi Turno e Risultato ,
vorrei avere restituito dalla query i primi 3 risultati per ogni turno,
esempio :
Turno     Risultato
1                1-0
1                1-0
1                1-1
2                1-0
2                0-0
2                1-0
ieri ci ho perso la sera su google ma senza risultati.......
cosi mi son fermato  qui :
SELECT TOP 3 Turni.Turno, Turni.Risultato
FROM Turni;
grazie !


oi...non ditemi che non si può fare......

Vincenzo ha scritto:


Pochi giorni fa Roberto ha proposto una soluzione per un problema simile,
per estrarre i primi sei record di ogni categoria. Non mi ricordo
l'oggetto esatto, prova a fare una ricerca.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


    se ti  riferisci a quella con oggetto : Caso-controllo  ??
    questo è il codice :
Dim rst As DAO.Recordset
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Tabella3;"
Set rst = CurrentDb().OpenRecordset("Tabella1")
rst.MoveFirst
Do Until rst.EOF
    DoCmd.RunSQL "INSERT INTO Tabella3 ( ID, " & _
    "CodiceMedico, EtàPaziente, SessoPaziente ) " & _
    "SELECT TOP 6 ID, CodiceMedico, EtàPaziente, " & _
    "SessoPaziente FROM Tabella2 " & _
    "WHERE ((CodiceMedico='" & rst!CodiceMedico & _
    "') AND (EtàPaziente=" & rst!EtàPaziente & _
    ") AND (SessoPaziente='" & rst!SessoPaziente & "'));"
    rst.MoveNext
Loop
DoCmd.SetWarnings True
Set rst = Nothing
    penso che non si addica al mio caso :
non capisco perchè non possa funzionare, per il mio caso , questa :
SELECT TOP 3 Turni.Turno, Turni.Risultato
FROM Turni
WHERE (((Turni.Turno) Between 1 And 3));
ciao.

 ha scritto nel messaggio
news:c5jdqh$29kg7$1...@ID-24065.news.uni-berlin.de...

Ciao Vincenzo, si può fare ma bisogna aggiungere un campo che mi identifica
una differenza univoca all'interno dello stesso turno, ad esempio la data in
cui si è svolta la partita o qualunque cosa sia.
in questo caso
-----------------------------
SELECT *
FROM Turni
WHERE Data IN (Select TOP 3 Data
                           FROM Turni AS T
                           WHERE T.Turno=Turni.Turno
                           ORDER BY Data);
----------------------------
Ciao Giorgio

 ciao.
Perchč il TOP 3 viene applicato alla fine. Cioč prima la query seleziona
tutti i record dei turni 1, 2 e 3, e poi da tutti i record cosě ottenuti
prende i primi tre.
Quindi non i primi tre record di ciascun gruppo ma i primi tre presi da
quelli che ti restituirebbe la stessa query se non ci fosse il TOP 3.



se hai qualche altra idea.......
ciao e grazie lo stesso....

 ha scritto nel messaggio
news:c5jtp6$2goic$2...@ID-24065.news.uni-berlin.de...

Normalmente provo le soluzioni proposte, ho creato una tabella inserendo una
serie di dati e la query restituisce il risultato corretto, 3 record per
ogni turno.
Prova a postare i dati che hai e il codice sql della query.
Ciao Giorgio

 Ciao Giorgio
    ciao .

 > Prova a postare i dati che hai e il codice sql della query.
ho capito poco,
prova tu con questi dati
Tabella Turni
--------------------
Data     Turno     Risultato
14/01/2004     1     1-0
15/01/2004     1     1-0
16/01/2004     1     1-1
17/01/2004     2     1-0
18/01/2004     2     0-0
19/01/2004     2     1-0
20/01/2004     2     2-1
21/01/2004     2     2-2
22/01/2004     2     1-1
23/01/2004     1     2-1
24/01/2004     1     2-2
25/01/2004     1     2-3
------------------
Query (la stessa)
-----------------
SELECT Turni.Turno, Turni.Risultato
FROM Turni
WHERE (((Data) In (Select TOP 3 Data
                           FROM Turni AS T
                           WHERE T.Turno=Turni.Turno
                           ORDER BY Data)));
-----------------
Risultato ottenuto dalla Query
-----------------
Turno Risultato
1     1-0
1     1-0
1     1-1
2     1-0
2     0-0
2     1-0
--------------
Ciao Giorgio

intanto che provo...... ho trovato sul web questa , che è molto divertente ,
restituisce i record a n scelta , magari si può modificare ?
(Q)    How can I write a query to return every fifth record from a table?
(A)     Here's a general-purpose way to write a query to return every nth
record from a table. It will choose equally-spaced records, but not start in
any particular spot, i.e. it might return the 1st, 5th and 9th or 2nd, 6th
and 10th records if set to a spacing of 4. First, create a new function:
Function PlusOne (var As Variant)
Static i As Integer
    i = i + 1
    PlusOne = i
End Function
Then, create your query. Drag down whatever fields you want to see in the
output. Add one more column to the query, with these properties:
Field Expr1: PlusOne([MyField]) Mod 5
Show No
Criteria 0
You can use any field in your output in place of MyField -- it doesn't
matter which one you use. If you want every 7th record, use Mod 7, for every
10th record, use Mod 10, and so on.

 ha scritto nel
messaggio news:c5k4bk$8bd$1...@lacerta.tiscalinet.it...

            Wonderful ! Funziona alla grande !
            sbagliavo perchč inserivo la stessa data per ogni turno (come
accade nella realtą) , non avevo capito che bisognava utilizzare un valore
diverso per ogni record, quindi ho fatto fare il confronto con il campo ID
contatore e funziona alla meravaglia !
Mille grazie !


Se hai un ID meglio ancora, se ricordi la mia premessa
-----------------------
Ciao Vincenzo, si può fare ma bisogna aggiungere un campo che mi identifica
una differenza univoca all'interno dello stesso turno, ad esempio la data in
cui si è svolta la partita o qualunque cosa sia.
-----------------------
ps ho provato la funzione che hai trovato, a parte che sono contrario a far
interagire le query con le funzioni VBA perchè rallentano molto
l'esecuzione,  ma quella funzione mi sembra una cavolata o forse non l'ho
capita.
Ciao Giorgio

 Ciao Giorgio
    grazie ancora.ciao.

 record......
esatto, come vedi in questa serie di dati le prime tre date sul turno 1 sono
uguali alle prime 3 del turno 2 e la query funziona perfettamente.
-------------------------------
Data     Turno     Risultato
14/01/2004     1     1-0
15/01/2004     1     1-0
16/01/2004     1     1-1
14/01/2004     2     1-0
15/01/2004     2     0-0
16/01/2004     2     1-0
20/01/2004     2     2-1
21/01/2004     2     2-2
22/01/2004     2     1-1
23/01/2004     1     2-1
24/01/2004     1     2-2
25/01/2004     1     2-3
--------------------------
Ciao Giorgio

 Ciao Giorgio
    Buona giornata !

 funge secondo te ?
CiaoVincenzo,
se la tabella TurniGiocati serve come filtro puoi modificare la query cosě
-----------------------------
SELECT Turni.Turno, Turni.Risultato
FROM Turni
   INNER JOIN TurinGiocati
             ON Turni.Turno=TurniGiocati.T
WHERE Turni.Id  In (Select TOP 3 Id
                           FROM Turni AS T
                           WHERE T.Turno=Turni.Turno
                           ORDER BY Id)
---------------------------------------------
Ciao Giorgio

 ha scritto nel
messaggio news:c5lrkq$f7h$1...@lacerta.tiscalinet.it...

            Funge alla meraviglia !
  Infinite grazie........!
ciao !