Zgodnie z Podręcznikiem MySQL 5.7 ,
Nie należy używać aliasu w klauzuli WHERE, ponieważ alias jest generowany po uruchomieniu zapytania i może nie być gotowy po wykonaniu warunku WHERE. Otrzymany błąd aliasu jest nieznaną kolumną, ponieważ MySQL nie zna aliasu, dopóki nie zostanie wygenerowany w wyniku zapytania. Dlatego nie możesz użyć aliasu w klauzuli WHERE tutaj.
(Dodawanie po edycji pytania)
Możesz uzyskać pożądany wynik za pomocą następującego zapytania:
SELECT r.id, r.url, MAX(date) as `max_date`
FROM report as r
GROUP BY id, url;
Wyjaśnienie zapytania:w SELECT
klauzula wspominasz tylko kolumny, które chcesz wyświetlić, MAX()
funkcja sama wybierze maksymalne wartości (więc nie potrzebujesz klauzuli WHERE), a klauzula GROUP BY mówi wynikowi, aby pogrupować wszystkie wyniki na podstawie id
a następnie url
.