Raggruppare ed estrarre data più recente

stefanoxjx

Utente Attivo
24 Feb 2017
46
1
8
56
Ciao a tutti, ho un problema in una query che non vuole saperne di darmi soddisfazione :(
Ho due tabelle (Elenco, Valutazione) così composte:

Tabella Elenco:
ID
Descrizione
49A
50B

Tabella Valutazione:
ID
Ext_Id
Elenco_Id
Valutazione
Data
124942020-11-30
224952020-12-12
325042020-12-12
425022020-12-28

Avrei bisogno di estrarre da queste tabelle, il record con data più recente in base a Ext_id e il raggruppamento di Elenco_Id.

Per questa esigenza, ho scritto questa query:
Codice:
SELECT Elenco.Descrizione, Elenco.Id, MAX(valutazione.Data), Valutazione.Valutazione, Valutazione.Id FROM Elenco
JOIN Valutazione ON Valutazione.Elenco_Id = Elenco.Id WHERE Valutazione.Ext_Id = 2 GROUP BY elenco.Descrizione

Da questa query, mi aspetterei un risultato del tipo:
Descrizione
Elenco.ID
max(Valutazione.Data)
Valutazione
ID
A492020-12-1252
B502020-12-2824

Invece mi trovo con questo risultato:
Descrizione
Elenco.ID
ma(Valutazione.Data)
Valutazione
ID
A492020-12-1241
B502020-12-2843

Sono due giorni che faccio prove e non sono ancora riuscito a venirne a capo.
Cosa sto sbagliando secondo voi?
Grazie.

Stefano
 
prova con questa,
SQL:
SELECT e.descrizione, t.elenco_id, t.data, v.valutazione, v.id  FROM (
  SELECT
    v.elenco_id
  , MAX(v.data) as data
  FROM Valutazione v
  WHERE v.Ext_Id = 2
  GROUP BY v.elenco_id
) t
LEFT JOIN elenco e ON t.elenco_id = e.id
LEFT JOIN valutazione v ON t.elenco_id = v.elenco_id AND t.data = v.data

questo é il risultato

1607977028763.png


ps, non dimenticare la t dopo la parentesi tonda chiusa

in fondo alla query, puoi ordinare gli elementi selezionati con, per esempio,

ORDER BY descrizione DESC

1607977975557.png
 
Ultima modifica:
  • Like
Reactions: stefanoxjx
Ciao Marino e grazie per la risposta.
La tua query sembrerebbe funzionare bene.
Domani faccio prove un po' più approfondite e poi ti confermo.
Effettivamente, con il mio livello di conoscenza di MySQL non ci sarei mai arrivato :(
Comunque imparo sempre qualcosa di nuovo :)
Grazie ancora.

Stefano
 
Ciao Marino, grazie ancora per l'aiuto.
Ti confermo che la tua query funziona alla grande.

Stefano
 
ciao a tutti
mi collego a questo quesito ma è un pochino diverso.
Premetto che non sono assolutamente una programmatrice e sto iniziando ad imparare ad usare Access.
in allegato ho una lista materiali con i rispettivi testi, num documento d'acquisto, fornitore..., ed in fine la data di consegna relativa a quell'ordine.
il problema è che un materiale ha tante righe quanti sono gli ordini di acquisto.
Avrei la necessità di considerare SOLO la riga di un materiale con la data di consegna minore (più recente) raggruppando per materiale e lasciando le altre colonne con i valori rispettivi!!!
spero di essermi fatta capire.
grazie a chi risponderà!

Chiara

Cattura.PNG
 
anche in questo caso ottieni la data minima raggruppando per materiale,
poi per tutte le coppie selezionate , in join associ tutti gli altri valori

la stessa tabella può essere usata in join (vedi precedente discussione) usando gli alias
 
anche in questo caso ottieni la data minima raggruppando per materiale,
poi per tutte le coppie selezionate , in join associ tutti gli altri valori

la stessa tabella può essere usata in join (vedi precedente discussione) usando gli alias
Grazie mille Marino!! credo di esserci riuscita!!!!
 

Discussioni simili