目前我的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';
答案 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-您的字段是日期类型