簡體   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