[英]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.