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

时间:2017-01-25 14:53:42

标签: mysql sql mysqli

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

3 个答案:

答案 0 :(得分: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 :(得分:0)

这应该这样做:

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

答案 2 :(得分:0)

您可以使用聚合函数:

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