Mysql 将给定日期范围内的每日总计转化为每周总计

Posted

技术标签:

【中文标题】Mysql 将给定日期范围内的每日总计转化为每周总计【英文标题】:Mysql Sum daily totals into weekly totals for given date range 【发布时间】:2017-01-25 14:53:41 【问题描述】:

目前我的 db 表每天都有 dailTotal 值,我需要将这些分组到每周总计中。

是否可以将每日总计添加到每周总计中,并在给定日期范围内每周显示一行。

我不太确定从哪里开始。我目前要获取的查询是:

SELECT dailyTotal
FROM   energyUsage
WHERE  meterIdentifier = '1300011505120'
      AND startTime >= '2017-01-01 00:00:00'
      AND startTime <= '2017-12-31 00:00:00';

【问题讨论】:

【参考方案1】:

星期可能有点模棱两可。一个方便的定义是内置定义。所以,你可以用yearweek()做你想做的事:

SELECT YEAREWEEK(startTime) as yyyyww, SUM(dailyTotal)
FROM  energyUsage
WHERE  meterIdentifier = '1300011505120' AND
       startTime >= '2017-01-01' AND
       startTime <= '2017-12-31'
GROUP BY yyyyww
ORDER BY yyyyww;

您可以查看mode 参数来控制星期是从星期日还是星期一开始,以及一年中的第一周是什么时候。没有模式说:“一年中的第一周从 1 月 1 日开始”,尽管您可以为此输入逻辑。

注意:如果startTime 有时间组件,我猜你想要:

WHERE  meterIdentifier = '1300011505120' AND
       startTime >= '2017-01-01' AND
       startTime < '2018-01-01'  -- note the inequality

【讨论】:

如果没有规定从 1 月 1 日开始的年份,您的查询中使用的是什么?因为这就是我想要的 @user794846 。 . .阅读mode 参数。 . . dev.mysql.com/doc/refman/5.7/en/….【参考方案2】:

您可以使用聚合函数:

SELECT dailyTotal,
       sum(dailyTotal) over (partition by EXTRACT(MONTH FROM StartTime)) as MonTotal
FROM   energyUsage
WHERE  meterIdentifier = '1300011505120'
      AND startTime >= '2017-01-01 00:00:00'
      AND startTime <= '2017-12-31 00:00:00';

我在这里假设了很多事情,但你明白了。

1- MySQL版本支持聚合函数

2- 您的字段是日期类型

【讨论】:

您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 2 行的 '(partition by EXTRACT(MONTH FROM StartTime)) as MonTotal FROM energyUsage WHER' 附近使用 什么版本的mysql允许over-partition? $ mysql --version mysql Ver 15.1 Distrib 5.5.50-MariaDB, for Linux (x86_64) using readline 5.1 但是你可以在 MySQL 中重现它。看***.com/questions/11806528/…【参考方案3】:

应该这样做:

SELECT SUM(dailyTotal) AS weeklyTotal
FROM   energyUsage
WHERE  meterIdentifier = '1300011505120'
      AND startTime >= '2017-01-01 00:00:00'
      AND startTime <= '2017-12-31 00:00:00'
GROUP BY YEAR(startTime),WEEK(startTime);

【讨论】:

这个似乎不起作用:“字段列表”中的未知列“weeklyTotal”

以上是关于Mysql 将给定日期范围内的每日总计转化为每周总计的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中查找给定日期每周的总播放时间?

MS ACCESS – 返回一个日期范围内的每日预订资源计数

mysql选择范围内的日期时间对象

在 BigQuery 中,您将如何使用两个日期列计算每月和每日总计?

SQL 查询 - 多个日期范围

PostgreSQL:如何在给定日期范围内的每一天为每个帐户选择最后余额? [复制]