MySQL查询-日期范围

wgeznvg7  于 2023-02-11  发布在  Mysql
关注(0)|答案(4)|浏览(135)

您好,我正在使用下面的MySQL查询旁边的Grafana,和数据有关我的用电量。收集的数据范围从2021年底到目前为止,但结果只从12月21日到11月22日。

SELECT
Time AS "time",
SUM(Rate/800) as kWh
FROM Log 
GROUP BY MONTH(STR_TO_DATE(time, "%Y-%m-%d"))

有人能帮忙修改查询,显示2021年到2023年的所有相关月份吗?

rpppsulh

rpppsulh1#

请在问题中添加您的表结构和一些示例数据。
您当前的查询是非确定性的,如果您启用了ONLY_FULL_GROUP_BY,将失败并返回1055错误。您可以阅读有关MySQL Handling of GROUP BY here的详细信息。
您按MONTH(STR_TO_DATE(time, "%Y-%m-%d"))分组,2021-01-022022-01-032023-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`

对于日期格式'%Y-%m'2021-01-022022-01-032023-01-04,将分别返回为2021-012022-012023-01,并按正确的月份分组。

gudnpqoy

gudnpqoy2#

试试这个:

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"))
aiazj4mn

aiazj4mn3#

您可以在查询中添加WHERE子句,以限制要检索的日期范围。例如:

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")

这将按时间列和使用MONTH(STR_TO_DATE(Time,“%Y-%m-%d”))从时间中提取的月份对数据进行分组。

gj3fmq9x

gj3fmq9x4#

您可以使用此查询获取所需的输出:

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");
    • 结果如下所示:**

| * * 月份**|* * 千瓦时**|
| - ------|- ------|
| 二○二二年一月|小行星17007738|
| 二○二二年二月|小行星1770|
| 2022年至2024年|小行星1741656455|
| 二○二二年五月|小行星17381|
| 二○二三年一月|小行星175277|

相关问题