いくつかの列の最大値を持つ行を取得しようとしています。通常、これには Rank を使用し、rank = 1 を選択しますが、列の最大値だけが必要であることがわかっている場合、それは無意味に思えます。ここに私のSQLがあります:
SELECT
name,
value,
MAX(version)
FROM
my_table t
WHERE
person_type = "STUDENT"
GROUP by NAME,VALUE
HAVING version = max(version)
これは、実行しようとすると、「グループ化エラーに関連して何か間違ったことをしました」、つまり「GROUP BY式ではありません」を返します。group by フィールドにバージョンを追加すると、この SQL が実行されますが、それぞれの最大バージョンだけでなく、明らかにすべての行が返されます。
したがって、私の質問は主に「なぜこれがうまくいかないのですか?」です。バージョンの最大値を選択しているので、それでグループ化する必要がある理由がわかりません。他の解決策(パーティションオーバー、ランク...)があることは知っていますが、特にこれが構文的に欠陥がある理由にもっと興味があります。
EDIT:このhaving句の使用についてより明確に。
テーブル t に次の 2 つの行があるとします。
NAME VALUE VERSION
JEREMY C 1
JEREMY A 2
このクエリから返されるものは次のとおりです。
JEREMY A 2
しかし、持っているものを削除すると、次のようになります。
JEREMY A 2
JEREMY C 2