Newsgroup: it.comp.appl.access
Titolo: Query con valore da data piu' grande

Buongiorno a tutti,
avrei il seguente problema:
Ho una tabella che contiene tra l'altro i seguenti campi:
-CODICE ARTICOLO
-DATA ACQUISTO
-PREZZO DI ACQUISTO
-QUANTITA' ACQUISTATA
Il mio problema è estrarre per ogni articolo il prezzo relativo alla data
più alta.
Ho provato con una query selezionando la data più alta ed effettivamente per
ogni articolo mi mostra il record con la data più alta, ma non riesco a far
visualizzare anche il prezzo relativo a quel record, perchè mi visualizza
tutti i record.
Forse il problema è estremamente semplice, ma mi sto perdendo in un
bicchiere d'acqua.
Ringrazio anticipatamente tutti coloro che mi daranno una mano.
Alberoni Raffaele

 ha scritto nel messaggio
news:bVfo9.16231$Fz.4...@news1.tin.it...

Se i dati sono contenuti in una tabella chiamata Tabella1 e il campo [CODICE
ARTICOLO] è di tipo Testo, prova con una query di raggruppamento che ha il
seguente codice SQL:
SELECT Tabella1.[CODICE ARTICOLO], Max(Tabella1.[DATA ACQUISTO]) AS
[MaxDiDATA ACQUISTO], CCur(DLookUp("[PREZZO DI
ACQUISTO]","Tabella1","[CODICE ARTICOLO]=" & Chr$(34) & [CODICE ARTICOLO] &
Chr$(34) & " And [DATA ACQUISTO] =#" & Format(CDate([MaxDiDATA
ACQUISTO]),"mm/dd/yyyy") & "#")) AS [PREZZO DI ACQUISTO]
FROM Tabella1
GROUP BY Tabella1.[CODICE ARTICOLO];
Se invece [CODICE ARTICOLO] è un campo di tipo Numerico, prova con:
SELECT Tabella1.[CODICE ARTICOLO], Max(Tabella1.[DATA ACQUISTO]) AS
[MaxDiDATA ACQUISTO], CCur(DLookUp("[PREZZO DI
ACQUISTO]","Tabella1","[CODICE ARTICOLO]=" & [CODICE ARTICOLO] & " And [DATA
ACQUISTO] =#" & Format(CDate([MaxDiDATA ACQUISTO]),"mm/dd/yyyy") & "#")) AS
[PREZZO DI ACQUISTO]
FROM Tabella1
GROUP BY Tabella1.[CODICE ARTICOLO];
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 GROUP BY Tabella1.[CODICE ARTICOLO];
    Magari!...
    Non si puo' fare riferimento cosi' a "MaxDiDATA ACQUISTO". Scrivi
piuttosto:
        SELECT DISTINCT
            Tabella1.IDProdotto      AS IDProdotto
          , Max(Tabella1.DataOrdine) AS MaxDataOrdine
          , CCur
            (
              DLookUp
              (
                "[Prezzo]"
              , "Tabella1"
              , "[IDProdotto]=" & [IDProdotto]
              & " AND "
              & "[Data]=" & CLng(Max([Tabella1].[Data]))
              )
            )                        AS Prezzo
        FROM
            Tabella1
        GROUP BY
            Tabella1.IDProdotto
        HAVING
            (
              (
                DLookUp
                (
                  "[Prezzo]"
                , "Tabella1"
                , "[IDProdotto]=" & [IDProdotto]
                & " AND "
                & "[Data]=" & CLng(Max([Tabella1].[Data]))
                )
              )
              <>
              False
            )
        ;
    Ma, dato che usare le funzioni di Aggregazione sui domini in una query
e' male, preferisco scrivere:
        SELECT DISTINCT
            TEMP1.IDProdotto AS IDProdotto
          , TEMP1.MaxData    AS MaxData
          , Tabella1.Prezzo  AS Prezzo
        FROM
            (
              SELECT
                  Tabella1.IDProdotto AS IDProdotto
                , Max(Tabella1.Data)  AS MaxData
              FROM
                  Tabella1
              GROUP BY
                  Tabella1.IDProdotto
            ) AS TEMP1
            INNER JOIN
            Tabella1
            ON
              (TEMP1.IDProdotto = Tabella1.IDProdotto)
              AND
              (TEMP1.MaxData    = Tabella1.Data)
        ;
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

           , Max(Tabella1.Data)       AS MaxData

--


 ha scritto nel messaggio
news:anvcnj$huodd$1...@ID-52090.news.dfncis.de...

[CUT]
Scusami Maurizio, ma che stai dicendo??
Forse sarebbe bene che provassi prima di dire che non funziona!!
Il codice SQL  che ho postato funziona perfettamente.
Certo che se tu fai un brutale copia/incolla senza renderti conto che
Outlook Express, con le sue brutali andate a capo, ha spaccato i nomi e
tolti degli spazi, forse a te non funziona; ma se risistemi i macelli che OE
ha prodotto sul codice SQL, vedrai che tutto funziona.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


 OE ha prodotto sul codice SQL, vedrai che tutto funziona.
    :-)
    Una volta tanto il "povero" OE non c'entra. Ho fatto io tutto da solo:
ho eseguito a "memoria" la tua query e ho "deciso" che non poteva
funzionare. Scusa.
    Poi non ho piu' pensato di verificare perche' ero piu' interessato a
"dimostrare" che l'uso di DLookUp (e delle sue sorelle) in una query e'
male. Ed ovviamente resto di questa opinione.


 --------
--


 l'uso di quelle funzioni risulta di una comodità unica. :-)
    Nel caso specifico non e' tanto questione di performance, pure
rilevante, quanto di, a seconda dei casi, "masochismo", "sciatteria" o "non
consapevolezza".
    Le 12 (ho contato giusto?) funzioni di "aggregazione sui domini"
esistono in Access ma non in altri ambienti in cui le query che costruiamo
potrebbero girare. La conseguenza e' che chi si abitua ad usarle nelle query
risolve male, cioe' rinunciando alla velocita', il suo problema di oggi e
per contro non si abitua a programmare in termini piu' generali e piazza nel
suo applicativo una bomba ad orologeria senza conoscerne l'ora di
esplosione.


Grazie a tutti siete stati molto bravi ed efficaci...
...........come al solito.............!!!!
Complimenti.
Alla prossima
Alberoni Raffaele