如何修复MySQL Query Alias未知列? 2018

时间:2018-02-22 08:22:19

标签: mysql

服务器版本: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,url,date
1,facebook.com,2018年1月1日 2,google.com,2018年1月2日 3,facebook.com,2018年1月5日 4,youtube.com,jan 6,20188 5,youtube.com,2018年1月1日 6,stackoverflow.com,jan 7,20188 7,stackoverflow.com,2018年8月8日

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

1 个答案:

答案 0 :(得分:2)

根据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对所有结果进行分组。