请在问题中添加您的表结构和一些示例数据。 您当前的查询是非确定性的,如果您启用了ONLY_FULL_GROUP_BY,将失败并返回1055错误。您可以阅读有关MySQL Handling of GROUP BY here的详细信息。 您按MONTH(STR_TO_DATE(time, "%Y-%m-%d"))分组,2021-01-02、2022-01-03和2023-01-04将返回1。您需要按年和月分组。 如果运行这个修改后的查询版本,您应该能够看到发生了什么:
SELECT
MONTH(STR_TO_DATE(`Time`, '%Y-%m-%d')) AS `m`,
MIN(`Time`) AS `min_time`,
MAX(`Time`) AS `max_time`,
SUM(`Rate`/800) AS `kWh`
FROM `Log`
GROUP BY MONTH(STR_TO_DATE(`Time`, '%Y-%m-%d'));
由于您使用的是标准日期格式%Y-%m-%d,因此似乎没有必要使用STR_TO_DATE()。
SELECT
DATE_FORMAT(`Time`, '%Y-%m-01 00:00:00') AS `time`,
SUM(`Rate`/800) AS `kWh`
FROM `Log`
GROUP BY `time`
SELECT
Concat(YEAR(STR_TO_DATE(Time, "%Y-%m-%d")),'-', MONTH(STR_TO_DATE(Time, "%Y-%m-%d"))) as month,
SUM(Rate/800) as kWh
FROM Log
GROUP BY YEAR(STR_TO_DATE(Time, "%Y-%m-%d")), MONTH(STR_TO_DATE(Time, "%Y-%m-%d"))
SELECT
DATE_FORMAT(Time, "%Y-%m") AS "time",
SUM(Rate/800) as kWh
FROM Log
WHERE Time BETWEEN '2021-01-01' AND NOW()
GROUP BY DATE_FORMAT(Time, "%Y-%m")
SELECT
DATE_FORMAT(STR_TO_DATE(Time, "%Y-%m-%d"),"%Y-%m") AS "Month",
SUM(Rate / 800) as kWh
FROM
Log
GROUP BY
DATE_FORMAT(STR_TO_DATE(Time, "%Y-%m-%d"),"%Y-%m"), Time
ORDER BY
STR_TO_DATE(Time, "%Y-%m-%d");
4条答案
按热度按时间rpppsulh1#
请在问题中添加您的表结构和一些示例数据。
您当前的查询是非确定性的,如果您启用了ONLY_FULL_GROUP_BY,将失败并返回1055错误。您可以阅读有关MySQL Handling of GROUP BY here的详细信息。
您按
MONTH(STR_TO_DATE(time, "%Y-%m-%d"))
分组,2021-01-02
、2022-01-03
和2023-01-04
将返回1。您需要按年和月分组。如果运行这个修改后的查询版本,您应该能够看到发生了什么:
由于您使用的是标准日期格式
%Y-%m-%d
,因此似乎没有必要使用STR_TO_DATE()
。对于日期格式
'%Y-%m'
、2021-01-02
、2022-01-03
和2023-01-04
,将分别返回为2021-01
、2022-01
和2023-01
,并按正确的月份分组。gudnpqoy2#
试试这个:
aiazj4mn3#
您可以在查询中添加WHERE子句,以限制要检索的日期范围。例如:
这将按时间列和使用MONTH(STR_TO_DATE(Time,“%Y-%m-%d”))从时间中提取的月份对数据进行分组。
gj3fmq9x4#
您可以使用此查询获取所需的输出:
| * * 月份**|* * 千瓦时**|
| - ------|- ------|
| 二○二二年一月|小行星17007738|
| 二○二二年二月|小行星1770|
| 2022年至2024年|小行星1741656455|
| 二○二二年五月|小行星17381|
| 二○二三年一月|小行星175277|