You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB查询8月最大发电量日期返回空结果的异常问题

问题根源分析

你的查询逻辑存在一个关键错误:子查询SELECT MAX(generation) FROM solar_generation是获取整个表的发电量最大值,而非8月的最大值。

  • 7月查询能正常返回,是因为2023年7月的发电量最大值恰好是全表的最大值,所以generation = 全表最大值和MONTH(timestamp)=7的条件能匹配到数据。
  • 8月的发电量最大值小于全表最大值,此时generation = 全表最大值的条件在8月数据中没有匹配项,自然返回空结果集。
修正方案

你需要将子查询的范围限定在目标月份,确保和外层查询的时间范围一致,以下是两种可行写法:

写法1:子查询添加时间过滤

直接在子查询中加入月份和年份条件,让子查询仅计算目标月份的最大值:

SELECT DATE_FORMAT(`timestamp`, '%a %d %M') AS timestamp, `generation` 
FROM solar_generation 
WHERE `generation` = (
    SELECT MAX(`generation`) 
    FROM solar_generation 
    WHERE MONTH(timestamp)= 8 AND YEAR(timestamp) = 2023
) 
AND MONTH(timestamp)= 8 AND YEAR(timestamp) = 2023;

写法2:使用窗口函数(更推荐)

如果存在多条记录同为当月最大值的情况,窗口函数可以一次性返回所有符合条件的记录,逻辑也更清晰:

SELECT formatted_timestamp, generation
FROM (
    SELECT 
        DATE_FORMAT(`timestamp`, '%a %d %M') AS formatted_timestamp,
        `generation`,
        ROW_NUMBER() OVER(PARTITION BY MONTH(timestamp), YEAR(timestamp) ORDER BY `generation` DESC) AS rn
    FROM solar_generation
    WHERE MONTH(timestamp)= 8 AND YEAR(timestamp) = 2023
) t
WHERE rn = 1;

若需要返回所有当月最大值记录(比如多天发电量并列最高),将ROW_NUMBER()替换为RANK()即可。

内容的提问来源于stack exchange,提问作者northwarks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:07:05