Newsgroup: it.comp.appl.access
Titolo: ancora su query con raggruppamento

Salve a tutti provo a ripostare un quesito che credo di non aver esposto
molto chiaramente, la prima volata
In A97:
ho una tabella, Tabella1 con questi campi:
[nome], [n_domanda],[tipo_doma]
in [nome] i valori possonono ripertersi, [n_domanda] č diverso per ciascun
record , mentre [tipo_doma] č uguale a i=iniziale o r=rettifica.
Importante: il valore di n_domanda purtroppo non č progressivo, qiondi
potrei avere n_domanda=15 von tipo_doma =i e per la stessa persona,
n_domanda =12 e tipo_domanda =r
Come faccio ad ottenere da una query tutti i nomi con il n_domanda piu
recente?
Ho provato con la seg. sintassi,
SELECT Tabella1.nome, Last(Tabella1.tipo_doma) AS UltimoDitipo_doma
FROM Tabella1
GROUP BY Tabella1.nome;
 ma non appena aggiungo il campo n_domanda viene visualizzato sia il record
con la domanda di tipo =i che quello di tipo=r.
Come faccio a vedere la domanda piů recente, portandomi dietro anche il
valore presente in n_domanda?
Grazie a tutti.
Giancarlo

 ha scritto nel messaggio
news:zI0Vb.200602$VW.81...@news3.tin.it...

Ciao,
vediamo se ho capito
hai questi dati e il campo N_Domanda non č mai uguale
Nome    N_Domanda   Tipo_Doma
-------   -------------   -------------
Pino       125                 i
Pino        18                  r
Pino       1                     i
Pino       21                   r
Gino      238                 i
Gino      15                   r
Gino      3                     i
e vuoi ottenere
---------------------------
Pino       21                   r
Gino      3                     i
Prova Cosě
----------------------------------
SELECT Nome,
               N_Domanda,
               Tipo_Doma
FROM    Domande AS D1
WHERE  N_Domanda IN
               (SELECT LAST(N_Domanda)
                FROM Domande AS D2
                WHERE D2.Nome=D1.Nome)
----------------------------------
Le funzioni di aggregazione LAST e FIRST che io sappia esistono solo in
Access e penso che lavorino sui BookMark della tabella, non mi sono mai
fidato a utilizzarle se non per prendere un valore a caso in un
raggruppamento. Se vuoi un consiglio aggiungi alla tabella un campo di tipo
Data e in fase di inserimento domanda gli assegni la data, le ore i minuti e
i secondi ovvero NOW() del momento, oppure aggiungi un campo di tipo
contatore e lavori sul MAX di quest'ultimo.
Ciao Giorgio

 news:zI0Vb.200602$VW.81...@news3.tin.it...
Ciao,
a volte per sonnolenza ricado nelle subquery
Al posto di questa
-------------------------
SELECT Nome,
               N_Domanda,
               Tipo_Doma
FROM    Domande AS D1
WHERE  N_Domanda IN
               (SELECT LAST(N_Domanda)
                FROM Domande AS D2
                WHERE D2.Nome=D1.Nome)
-------------------------
Prova così
-------------------------
SELECT Nome,
               N_Domanda,
               Tipo_Doma
FROM    Domande AS D1
  INNER JOIN
               (SELECT Nome,
                      LAST(N_Domanda) as LN_Domanda
                FROM Domande
                GROUP BY Nome) AS D2
         ON D1.Nome=D2.Nome
      AND  D1.N_Domanda=D2.LN_Domanda
-------------------------
se hai molti record risulterà più veloce.
Ciao Giorgio


Ciao. Giancarlo.


Access <=97 ?
--------------------------------
SELECT D1.Nome,
               D1.N_Domanda,
               D1.Tipo_Doma
FROM    Domande AS D1
  INNER JOIN
               [SELECT Nome,
                      LAST(N_Domanda) as LN_Domanda
                FROM Domande
                GROUP BY Nome]. AS D2
         ON D1.Nome=D2.Nome
      AND  D1.N_Domanda=D2.LN_Domanda
----------------------------------
Ciao Giorgio

 ha scritto nel messaggio
news:c0629t$msv$1...@lacerta.tiscalinet.it...

Scusa per il ritardo nella risposta.
Sì ho A97 e quello che hai scritto funziona.
Grazie!
Giancarlo