Selon Manuel de référence MySQL 5.7 ,
Vous ne devez pas utiliser d'alias dans la clause WHERE car l'alias est généré lors de l'exécution de la requête et peut ne pas être prêt lorsque la condition WHERE s'exécute. Vous obtenez l'alias est une erreur de colonne inconnue car MySQL n'est pas au courant de l'alias tant qu'il n'a pas été généré à la suite de la requête. Par conséquent, vous ne pouvez pas utiliser d'alias dans la clause WHERE ici.
(Ajout après modification de la question)
Vous pouvez obtenir le résultat souhaité avec la requête suivante :
SELECT r.id, r.url, MAX(date) as `max_date`
FROM report as r
GROUP BY id, url;
Explication de la requête :dans SELECT
clause vous ne mentionnez que les colonnes que vous souhaitez afficher, le MAX()
la fonction sélectionnera déjà les valeurs maximales elle-même (vous n'avez donc pas besoin d'une clause WHERE), et la clause GROUP BY indique au résultat de regrouper tous les résultats en fonction de id
puis url
.