Newsgroup: it.comp.appl.access
Titolo: Aiuto per query

Vado sempre in dififcoltà quando devo questo tipo di quesry che non saprei come definire
Vorrei ottenere una sola  riga per nome, qulla col campo data maggiore, ma siccome trova il campo Inrvento diverso mi 
tira dentro tutto:
 
Nome   Intervento Data
Rossi    prova1   10/05/19
Rossi    prova2   19/05/19
Bianchi  prova3   15/05/19
 
Vorrei ottenere:
Nome   Intervento Data
Rossi    prova2   19/05/19
Bianchi  prova3   15/05/19
 
Come la dovrei scrivere? Grazie per ogni info
 
-- 
Greg

Devi usare una query con tabelle derivate...
 
Questa di esempio fa la stessa cosa estraendo i dati con prezzo maggiore...
 
Adattala al tuo caso specifico sostituemdo ai campi dell'esempio i tuoi facendo riferimento che la dove nell'esempio ho il MAX(Prezzo) nel tuo caso avrò MAX(CampoData)...
 
Select T1.Provenienza,MAXP.IdProdotto,MAXP.Massimo 
    From T1 
    RIGHT JOIN 
        (select IdProdotto, Max(Prezzo) as Massimo
         From T1
         Group By IdProdotto) AS MAXP 
    ON T1.IdProdotto=MAXP.IdProdotto AND T1.Prezzo=MAXP.Massimo
 
@Alex

Il 20/05/19 18:51:51 @Alex ha scritto:

Grazie, spero di riuscire ad adattare, ho sempre trovato ostiche questo ripo di queru perhè non riesco proprio a 
"leggerle"-
Son curioso di vedere se Provioenza diversa causa piu righe diverse
 
-- 
Greg

Greg submitted this idea :

SELECT T.Nome, Last(T.Intervento) AS LastOfIntervento,
Max(T.Data) AS MaxOfData FROM T
GROUP BY T.Nome ORDER BY Last(T.Intervento);
 
Bruno

 Bruno
 
Molto semplice e chiara, si legge pure bene, e funziona. Non pensavo di potesse applicare la funzione Last ad un c ampo 
stringa. Si impara sempre.
Grazie :)
 
-- 
Greg

Il 21/05/19 02:56:11 Bruno Campanini ha scritto:

La sto adattanto agli scopi, se volessi aggiungere una ulteriore condizione su Max(T.Data) non restituisce il risultato 
che mi apsetto:
 
SELECT T.Nome, Last(T.Intervento) AS LastOfIntervento,
Max(T.Data) AS MaxOfData FROM T
GROUP BY T.Nome ORDER BY Last(T.Intervento)
Having Max(T.Data) AS MaxOfData > #20/05/19#
 
Guardando meglio scopro che da il risultato opposto a quello atteso: tutti records con data MINORE del 20.5.19 invece 
di maggiore.
Incredulo ho provato a camabire segno di uguaglianza, e incredibilmente fornisce il risultato voluto:
Having Max(T.Data) AS MaxOfData < #20/05/19# mi da i record con MaxOfData maggiore del 20/5/19 !!!
 
Come si spiega?
 
-- 
Greg

 
 
 
a primissima vista:
non credo che si possa utilizzare having 
(che esprime un criterio di selezione su valori aggregati)
per ottenere un nuovo CampoCalcolato (AS ...)
 
quindi dovrebbe essere un errore di sintassi
 

Il 23/05/19 10:47:26 GiorgioDaPrato ha scritto:

Esatto, devo in qualche modo selezionare prima, grazie
 
-- 
Greg

Forse...
 
Select T.Nome,tdMAXDate.MaxOfData 
    From T
    RIGHT JOIN
        (select Nome, Max(Data) as MaxOfData 
         From T
         Group By Nome
         HAVING Data>#20/05/19#) AS tdMAXDate
    ON T.Nome=tdMAXDate.Nome AND T.Data=tdMAXDate.MaxOfData 
 
@Alex


La versione sopra prevede >#20/05/19#, ma ovviamente se vuoi <#20/05/19# metterai così...
 
@Alex
 
@Alex

Il 23/05/19 14:40:13 @Alex ha scritto:

Grazie Alex, adesso mi metto al lavoro, ti farò sapere :)
 
-- 
Greg

 @Alex
 
Perfetta! Grazie :)
 
-- 
Greg

Era quella che avevo suggerito all'inizio che sembrava meno bella ;-)
 
Saluti
@Alex