Newsgroup: it.comp.appl.access
Titolo: Formule "Max" e "Ultimo" delle query

Da utente (leggero) di A97 (non programmatore) chiedo gentilmente una mano a
chi ne sa più di me, sul seguente problema.
La query di selezione (5 tabelle) ben funzionante che alimenta il mio report
più importante, fa le bizze sulle formule MAX e ULTIMO e non estraendo gli
ultimi record (Tabelle Ordini 1 e 2; campi DATA e IMPORTO) come vorrei.
Infatti spesso accade, con logica che ignoro, di ottenere record di data e
importo non rispondente.
Come posso fare ?  Grazie.
Roberto Durazzini

 ha scritto nel messaggio
news:3ZTn5.96331$dF5.1...@news.infostrada.it...

Sul campo sul quale applichi la formula ULTIMO, fai anche un ordinamento
crescente.
Roberto

 wrote in message
cS5o5.98438$dF5.1...@news.infostrada.it...

Si tratta proprio e solo della funzione ULTIMO che presenta ironicamente
nella risposta sempre il penultimo oppure il primo record.
Anche con il tuo suggerimento di fare un ordinamento crescente.
Sarà un dispetto informatico ?

 ha scritto nel messaggio
news:4Obo5.100446$dF5.1...@news.infostrada.it...

Il problema è quello che ha cercato di spiegarti Giovanni Albertone;
probabilmente togliendo la funzione MAX, la funzione ULTIMO ti funziona.
Prova.
Roberto


Alla fine della fiera, il tuo problema è che tu hai costruito una query di
aggregazione quando invece, per tua ammissione, hai bisogno di ottenere una
query di selezione.
Ma come dice giustamente Giovanni Albertone una query di aggregazione non
seleziona record.
Se il tuo scopo è quello di selezionare da un recordset le righe che abbiano
l'importo con il valore massimo e tra queste righe quella (o quelle) che
abbia nel campo data il valore più alto, io farei così.
Ipotizziamo che la tua query basata sulle tue 5 tabelle si chiami Query1000
e contenga 7 campi: CampoData, Importo, Campo1, Campo2 ......., Campo5.
Elimina qualsiasi funzione di aggregazione (MAX, ULTIMO ecc.) da Query1000.
Creati la seguente query di aggregazione e chiamala Query1:
SELECT Max(Query1000.Importo) AS MaxDiImporto
FROM Query1000;
Ora creati un'altra query di aggregazione che chiamerai Query2 e che ha il
seguente codice SQL:
SELECT Query1.MaxDiImporto, Max(Query1000.CampoData) AS MaxDiCampoData
FROM Query1000 INNER JOIN Query1 ON Query1000.Importo = Query1.MaxDiImporto
GROUP BY Query1.MaxDiImporto;
Infine creati la tua query di selezione che avrà il seguente codice SQL:
SELECT Query1000.CampoData, Query1000.Importo, Query1000.Campo1,
Query1000.Campo2, Query1000.Campo3, Query1000.Campo4, Query1000.Campo5
FROM Query1000 INNER JOIN Query2 ON (Query1000.CampoData =
Query2.MaxDiCampoData) AND (Query1000.Importo = Query2.MaxDiImporto);
Facci sapere
Roberto

Non ho buoni risultati da far sapere a Roberto e a Giovanni Albertone ai
quali vanno comunque i miei ringraziamenti. Il mio scopo è quello di avere
per ogni gruppo di (campo)Clienti di una certa (campo)Città l'ultimo
(campo)Ordine trasmesso alla Ditta K con relativa (campo)Data e relativo
(campo)Importo e l'ultimo ordine con campi analoghi passato alla Ditta R;
ovviamente gli Importo devono essere gli ultimi e non i più alti. Con la mia
query (un po' maccheronica) di 19 campi imposto con "Criteri" la Città e
tutto va a posto, salvo il famoso ULTIMO applicato agli Importo che funziona
solo se, come suggerito da Roberto, tolgo MAX dal campo Data.
Le mie nozioni appena >0 non mi consentono di adattare l'SQL fornito da
Roberto alla struttura che ho cercato di descrivere, anche se c'ho provato e
penso di averne compreso la logica sottesa.
Che fare ?
Roberto Durazzini

 ha scritto nel messaggio
news:Bdyo5.113123$dF5.1...@news.infostrada.it...

Mi dispiace ma non ti seguo più; ora parli anche di un ordine tramesso a due
ditte diverse; a cosa serve il campo Ordine?
Cosa significa gli ultimi Importo? Vuoi dire forse l'Importo dell'ultimo
Ordine?
Quali sono i campi analoghi tra i due ordini? L'Importo? La Data? L'Ordine?
Se ci esemplifichi il contenuto del tuo recordset e che quali righe vuoi
selezionare forse.......
Roberto