获取过去28天每日最大current值的SQL查询问题
解决每日最大值提取问题
嗨,我来帮你搞定这个问题!你原来的查询只返回一行结果,核心原因很简单:你没有按日期对数据进行分组。当你直接使用MAX(current)而不搭配GROUP BY时,SQL会把整个符合WHERE条件的数据集当成单一分组,自然只会返回一个全局最大值,而不是每天的最大值。
正确的查询语句
针对你的需求,我们需要先把时间戳ts提取出日期部分,然后按这个日期分组,再对每组计算current的最大值。修改后的SQL如下:
SELECT DATE(ts) AS date, MAX(current) AS daily_max_current FROM mytable WHERE ts > DATE_ADD(NOW(), INTERVAL -28 DAY) GROUP BY DATE(ts) ORDER BY DATE(ts);
语句解释
DATE(ts):把带时间的戳转换为纯日期格式(比如2018-01-20 16:27:10变成2018-01-20),这样同一天的所有记录会被归为一组。GROUP BY DATE(ts):告诉SQL按日期分组计算聚合值,这是获取每日最大值的关键。MAX(current) AS daily_max_current:为每组(每天)计算current的最大值,并给这个结果列起一个清晰的别名。ORDER BY DATE(ts):让结果按日期顺序排列,方便查看。
针对你示例数据的效果
用你给出的2018-01-20的几条记录来测试,这个查询会返回:
+------------+------------------+ | date | daily_max_current| +------------+------------------+ | 2018-01-20 | 439.37 | +------------+------------------+
如果你的表中还有其他日期的记录,查询会自动为每个日期返回对应的最大值,完全符合你过去28天每天取最大值的需求。
内容的提问来源于stack exchange,提问作者Craver2000




