【问题标题】:mysql sum query between interval间隔之间的mysql求和查询
【发布时间】:2016-11-04 17:30:38
【问题描述】:

我对 mysql 查询有一点奇怪的问题 :)

这是我的桌子:

mysql> describe meteo;

| Field     | Type        | Null | Key | Default | Extra          |

| id        | int(11)     | NO   | PRI | NULL    | auto_increment |

| name      | varchar(32) | NO   |     | NULL    |                |

| date      | datetime    | NO   |     | NULL    |                |

| value     | int(8)      | NO   |     | NULL    |                |

我的目标是:创建一个查询,将 14:00 到 16:00 的所有值相加,以 5 或 10 分钟为单位。

我从(14:00 到 16:00)做了 N 次接近解决方案的事情

SELECT sum(value)  FROM meteo WHERE date>='2016-09-9 14:30:00' AND date<='2016-09-9 14:35:00'

SELECT sum(value)  FROM meteo WHERE date>='2016-09-9 14:35:00' AND date<='2016-09-9 14:40:00'

... 等等……

是否存在只给出区间范围的查询? 我希望在输出中有这样的东西:

2016-09-9 14:30:00 2016-09-9 14:35:00  176

2016-09-9 14:35:00 2016-09-9 14:40:00  2312

...

感谢您的帮助!

【问题讨论】:

标签: mysql datetime intervals


【解决方案1】:

您可以使用表 min_interval

  id begin                 END
  1  2016-09-9 14:30:00    2016-09-9 14:35:00
  2  2016-09-9 14:35:00    2016-09-9 14:40:00
  3  2016-09-9 14:40:00    2016-09-9 14:45:00

您可以查看这篇文章,了解如何生成日期列表,只需几分钟即可轻松更改。

generate days from date range

然后

 SELECT m.begin, m.end, SUM(t.value)
 FROM min_interval m 
 LEFT JOIN meteo t
   ON t.date >= m.begin
  AND t.date < m.end
 GROUP BY m.begin, m.end

【讨论】:

  • 感谢回复,但是每次生成一个日期表有点困难!也许我应该改变方式,把它变成 python!
  • 你不需要表,你可以创建一个子查询。你检查过生成天数链接吗?
【解决方案2】:

你可以像这样使用 mysql date_add() 函数:

SELECT sum(value)  FROM meteo WHERE date BETWEEN DATE_ADD(date,INTERVAL 5 MINUTE) AND date

【讨论】:

  • sum all value from 14:00 to 16:00 stepping by 5 or 10 minutes.??
  • 抱歉误读了问题,这不包括步进过程,抱歉。
【解决方案3】:
Select sum(value) from Meteo Where date >= currentDate 13:55 and date <= currentDate 16:10;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多