MySQL5.7リファレンスマニュアル によると 、
エイリアスはクエリの実行時に生成され、WHERE条件の実行時に準備ができていない可能性があるため、WHERE句でエイリアスを使用しないでください。 MySQLはクエリの結果として生成されるまでエイリアスを認識しないため、エイリアスは不明な列エラーになります。したがって、ここではWHERE句でエイリアスを使用できません。
(質問編集後の追加)
次のクエリで目的の結果を得ることができます:
SELECT r.id, r.url, MAX(date) as `max_date`
FROM report as r
GROUP BY id, url;
クエリの説明:SELECT
で 表示する列、MAX()
のみに言及する句 関数はすでに最大値自体を選択しており(したがって、WHERE句は必要ありません)、GROUP BY句は、id
に基づいてすべての結果をグループ化するように結果に指示します。 次にurl
。