Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复MySQL查询别名未知列?2018_Mysql - Fatal编程技术网

如何修复MySQL查询别名未知列?2018

如何修复MySQL查询别名未知列?2018,mysql,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的结果 我已经试过在和之间使用,但都不起作用。别名是未知列 我想做的是 我想

服务器版本: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的结果

我已经试过在和之间使用,但都不起作用。别名是未知列

我想做的是

我想检索url的最近日期

示例:
id、url、日期
1,facebook.com,2018年1月1日
2,谷歌网站,2018年1月2日
3,facebook.com,2018年1月5日
youtube.com,2018年1月6日
youtube.com,2018年1月1日
6,stackoverflow.com,2018年1月7日
7,stackoverflow.com,2018年1月8日

通过运行它应该检索的查询,
3,facebook.com,2018年1月5日
2,谷歌网站,2018年1月2日
youtube.com,2018年1月6日
stackoverflow.com,2018年1月8日

标准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
对所有结果进行分组,然后根据

标准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

生成别名max\u date并在同一查询中使用它。别名是在查询运行时生成的,因此您不应该在WHERE子句的条件下使用它。也许
WHERE date=Max(date)
?您能解释一下您到底想提取什么吗?因为从查询中可以看出,即使没有包含WHERE子句,它也只会生成单行(日期最高的一行)。此外,结果行中的“max_date alias”和“date”列将具有相同的值,因为它实际上是具有最高日期的同一行。此外,如果它是单行,则不需要“订单依据”和“分组依据”。此外,如果您使用的是MAX(date),那么为什么要使用WHERE子句,因为MAX(date)也与WHERE条件类似。请解释一下你想要什么,好让我知道help@waqashsn检查我的更新示例检查我的更新答案。您正在生成别名max\u date并在同一查询中使用它。别名是在查询运行时生成的,因此您不应该在WHERE子句的条件下使用它。也许
WHERE date=Max(date)
?您能解释一下您到底想提取什么吗?因为从查询中可以看出,即使没有包含WHERE子句,它也只会生成单行(日期最高的一行)。此外,结果行中的“max_date alias”和“date”列将具有相同的值,因为它实际上是具有最高日期的同一行。此外,如果它是单行,则不需要“订单依据”和“分组依据”。此外,如果您使用的是MAX(date),那么为什么要使用WHERE子句,因为MAX(date)也与WHERE条件类似。请解释一下你想要什么,好让我知道help@waqashsn检查我的更新示例检查我的更新答案。我现在非常理解。好的,让我解释一下,过一会儿。忘了小组了。。。它找回了所有。。。但是max_date只检索最新日期,不包括行。对不起,我不明白你的意思。如果你删除GROUPBY子句,你能告诉我返回的是什么吗?我现在非常理解。好的,让我解释一下,过一会儿。忘了小组了。。。它找回了所有。。。但是max_date只检索最新日期,不包括行。对不起,我不明白你的意思。如果删除GROUPBY子句,您能告诉我返回的是什么吗。