所以我在PHPMyAdmin中对MariaDB运行查询,它一直工作得很好,直到我们进入新的一个月,对于我的生活,我看不到这个问题。该表采用以下格式作为示例,它包含到目前为止7月和8月的数据:
| 时间戳|一代|出口|
| --|--|--|
| 2023-08-01 23:00:00|四十三点四|十二点五|
用于返回2023年7月MAX值的SQL;
$sql_a = "SELECT DATE_FORMAT(`timestamp`, '%a %d %M') AS timestamp, `generation` FROM solar_generation WHERE `generation` = (SELECT MAX(`generation`) FROM solar_generation) AND MONTH(timestamp)= 7 AND YEAR(timestamp) = 2023";
这正是我所期望的输出:
Fri 07 July 43.0
如果我把SQL改成8月份
SELECT DATE_FORMAT(`timestamp`, '%a %d %M') AS timestamp, `generation` FROM solar_generation WHERE `generation` = (SELECT MAX(`generation`) FROM solar_generation) AND MONTH(timestamp)= 8 AND YEAR(timestamp) = 2023;
尽管表中有数据,但我得到以下结果:
MySQL returned an empty result set (i.e. zero rows)
如果运行以下查询:
SELECT MAX(`generation`) FROM solar_generation WHERE MONTH(timestamp)= 8 AND YEAR(timestamp) = 2023;
我得到了MAX生成,正如我所期望的8月,只要我开始构建查询以获取数据,它就停止返回数据?
我做错了什么,我只是假设相同的查询会工作,或者在第8个月暴露的查询中有缺陷?
2条答案
按热度按时间o4tp2gmn1#
我不使用MariaDB。
但这看起来很可疑:
基本上,它说:
solar_generation
的查询表generation
列值等于整个表中最大**generation
值的所有行**generation
列值generation
值不属于August(2023)这是Oracle,但忽略这一事实;这只是为了说明我认为正在发生的事情:
现在,让我们选择所有满足条件的行:max generation和July:
最大的一代和八月呢?
没有行,因为
generation = 99
属于July。我不知道你期望什么结果,因为你没有解释;如果是每月最大生成量,那么您可以这样做(还是Oracle;将其调整为MariaDB语法):
aemubtdh2#
Littlefoot提供的答案恰恰说明了问题所在。
最大值不属于8月份。
你需要对你的逻辑做一点改变。找出每个特定月份和年份的最大值。
对你来说是的,
我建议使用with子句at更有性能,并且如果将来发生变化,也更容易适应。
参见example