服务器版本: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的结果。
我已经尝试过
Having
和Between
,但是它不起作用。别名是未知列我想做的是
我想检索网址的最新日期。
例:
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
。