繁体   English   中英

Mysql将给定日期范围内的每日总数汇总为每周总数

[英]Mysql Sum daily totals into weekly totals for given date range

目前,我的 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';

周可能有点模棱两可。 一个方便的定义是内置定义。 所以,你可以使用yearweek()做你想做的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

这应该这样做:

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

您可以使用聚合函数:

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- 您的字段是日期类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM