服务器版本:5.6.38-MySQL社区服务器(GPL)
PHP版本:7.2.1
PHPMyAdmin:版本信息:4.7.7

这是我的mysql查询

SELECT r.id, r.url, MAX(date) as `max_date`, date
FROM report as r
WHERE max_date = date
GROUP BY id, url
ORDER BY bid DESC;


我想检索maxdate的结果。

我已经尝试过HavingBetween,但是它不起作用。别名是未知列

我想做的是

我想检索网址的最新日期。

例:
ID,网址,日期
1,facebook.com,2018年1月1日
2,google.com,2018年1月2日
3,facebook.com,2018年1月5日
4,youtube.com,2018年1月6日
5,youtube.com,2018年1月1日
6,stackoverflow.com,2018年1月7日
7,stackoverflow.com,2018年1月8日

通过运行查询,它应该可以检索,
3,facebook.com,2018年1月5日
2,google.com,2018年1月2日
4,youtube.com,2018年1月6日
7,stackoverflow.com,2018年1月8日

最佳答案

根据MySQL 5.7 Reference Manual


  标准SQL不允许在WHERE中引用列别名
  条款


您不应该在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

08-28 19:42