Mik*_*lty -1 php mysql sql max
我想从我的 mysql 数据库中获取每天的最高室外温度。它返回我的所有数据,但不返回外部温度。它始终为空。有人能帮我吗?这是mysql代码:
(SELECT MAX(tempOutside), tempInside, pressure, datetime
from weather
WHERE datetime BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE()
GROUP BY MONTH(datetime), DAY(datetime));
Run Code Online (Sandbox Code Playgroud)
现在返回:
null 18.4 1011 2014-01-23 00:15:04
null 19.2 1010 2014-01-24 00:00:05
null 19.6 1009 2014-01-25 13:15:02
Run Code Online (Sandbox Code Playgroud)
我的错误在哪里?一个解释会很好。谢谢
编辑:
我发现了错误。在我的 PHP 文件中我写了$row_array['tempOutside'] = ...在我更改 mysql 代码后MAX(tempOutside) AS tempOutside, ...它起作用了!
但我现在有一个新问题。它现在返回 maxOutSide 温度,但内部压力值和时间戳不是记录最大外部温度时记录的值。我该如何解决这个问题?应该是这样的:最大室外温度是在下午 5 点记录的 - 当时的内部和压力值是:...
它现在返回 maxOutSide 温度,但内部压力值和时间戳不是记录最大外部温度时记录的值。
如MySQL 扩展GROUP BY(已添加重点)下所述:
在标准 SQL 中,包含子句的查询
GROUP BY不能引用选择列表中未在GROUP BY子句中命名的非聚合列。例如,此查询在标准 SQL 中是非法的,因为name选择列表中的列不会出现在GROUP BY:Run Code Online (Sandbox Code Playgroud)SELECT o.custid, c.name, MAX(o.payment) FROM orders AS o, customers AS c WHERE o.custid = c.custid GROUP BY o.custid;为了使查询合法,
name必须从选择列表中省略该列或在GROUP BY子句中命名该列。MySQL 扩展了 的使用
GROUP BY,以便选择列表可以引用子句中未命名的非聚合列GROUP BY。这意味着前面的查询在MySQL中是合法的。您可以使用此功能避免不必要的列排序和分组,从而获得更好的性能。但是,这主要是在每个GROUP BY组中未命名的每个非聚合列中的所有值都相同时有用。服务器可以自由地从每个组中选择任何值,因此除非它们相同,否则所选择的值是不确定的。此外,添加子句不会影响每个组中值的选择ORDER BY。结果集的排序发生在选择值之后,并且ORDER BY不会影响服务器选择每个组中的哪些值。
我该如何解决这个问题?
您正在寻找的是分组最大值,可以通过将分组结果连接回表来获得:
SELECT tempOutside, tempInside, pressure, datetime
FROM weather w JOIN (
SELECT MONTH(datetime) m, DAY(datetime) d, MAX(tempOutside) t
FROM weather
WHERE datetime BETWEEN CURRENT_DATE - INTERVAL 30 DAY
AND CURRENT_DATE
GROUP BY m, d
) t ON t.m = MONTH(w.datetime)
AND t.d = DAY(w.datetime)
AND t.t = w.tempOutside
Run Code Online (Sandbox Code Playgroud)