Mysql将给定日期范围内的每日总计求和为每周总计

kuuvgm7e  于 2023-03-07  发布在  Mysql
关注(0)|答案(3)|浏览(97)

目前,我的数据库表中有每天的dailTotal值,我需要将这些值分组为每周的总数。
是否可以将每日总计添加到每周总计中,并在给定日期范围内的每周总计中显示一行。
我不太确定从哪里开始。我当前要获取的查询是按天:

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

wgeznvg71#

Weeks可能有点模糊。一个方便的定义是内置的定义。因此,您可以使用yearweek()函数来做您想做的事情:

SELECT YEARWEEK(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
lsmepo6l

lsmepo6l2#

可以使用聚合函数:

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

zc0qhyus

zc0qhyus3#

这应该可以做到:

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

相关问题