Non è possibile (non dovrebbe) inserire non aggregati nella riga SELECT
di una query GROUP BY
.Posso utilizzare colonne non aggregate con gruppo per?
Vorrei comunque accedere a uno dei non aggregati associati al max. In parole povere, voglio un tavolo con l'id più vecchio di ogni tipo.
CREATE TABLE stuff (
id int,
kind int,
age int
);
Questa interrogazione mi dà le informazioni che sto cercando:
SELECT kind, MAX(age)
FROM stuff
GROUP BY kind;
ma non è nella forma più utile. Voglio davvero che lo id
sia associato a ciascuna riga in modo da poterlo utilizzare nelle query successive.
Sto cercando qualcosa di simile:
SELECT id, kind, MAX(age)
FROM stuff
GROUP BY kind;
Che Risulterà:
SELECT stuff.*
FROM
stuff,
(SELECT kind, MAX(age)
FROM stuff
GROUP BY kind) maxes
WHERE
stuff.kind = maxes.kind AND
stuff.age = maxes.age
sembra davvero che ci dovrebbe essere lontano per ottenere queste informazioni senza la necessità di aderire. Ho solo bisogno del motore SQL per ricordare le altre colonne quando calcola il massimo.
Abbastanza sicuro che si sta andando ad avere bisogno unirti per ottenere quello che vuoi. Sarebbe bello se ci fosse un modo per dire "tirare i valori da questa riga hai appena preso il massimo da" ma senza un join non è a mia conoscenza. – heisenberg
Tuttavia, potrebbe non esserci un solo ID con l'età massima. Quale dovrebbe essere restituito? O dovresti prenderne uno per fila? – Blorgbeard
O nel caso in cui si abbiano più aggregati che selezionano righe diverse, dovrebbe esserci una sorta di zucchero sintattico che consente di indicare quale aggregato ogni campo deve essere associato. – heisenberg