【问题标题】:SQL to average different time scopesSQL平均不同的时间范围
【发布时间】:2021-11-22 15:05:50
【问题描述】:

我有一个结构简单的表 (DTP),大约有 20 万行

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| DT    | datetime     | YES  |     | NULL    |                |
| PWR   | decimal(5,3) | YES  |     | NULL    |                |
| Pix   | int(11)      | NO   | PRI | NULL    | auto_increment |
+-------+--------------+------+-----+---------+----------------+
  • DT = 每 10 分钟(日光)的日期时间
  • PWR = 10 分钟期间的平均发电量 kW

我想知道日、周、月、年的平均发电量

我什至在尝试之前就怀疑以下内容是错误的,但我无法找到有关如何构建我的 SQL 以返回这些平均值的帮助。 (我预计每个周期的每个平均值都有一个不同的查询。

SELECT AVG(PWR) AS DailyAvgPwr
FROM DTP 
WHERE (year(DT) AND month(DT) AND day(DT)) IN(
    SELECT PWR, year(DT), month(DT), day(DT)
    FROM DTP
    GROUP BY year(DT), month(DT), day(DT)
    ORDER BY year(DT), month(DT), day(DT);

如果能对至少一个时期提供一些指导,那就太好了:我猜我可以推断答案以获得其他时期的平均值。

[如果相关,我使用的是 MariaDB,服务器版本:10.5.12]

【问题讨论】:

  • 您能提供一些数据示例和您的预期结果吗?

标签: mysql sql datetime mariadb


【解决方案1】:

我认为这是WITH ROLLUP 的工作。试试这样的。

SELECT YEAR(DT) YR, MONTH(DT) mon, DAY(DT) dy,
       AVG(PWR) kW
  FROM DTP
 GROUP BY YEAR(DT), MONTH(DT), DAY(DT) WITH ROLLUP

【讨论】:

  • 完美。我以前从未听说过“WITH ROLLUP”。谢谢
猜你喜欢
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2019-11-09
  • 2015-06-04
相关资源
最近更新 更多