簡體   English   中英

MySQL GROUP BY WEEK從每月1日開始

[英]MySQL GROUP BY WEEK Starting 1st of month

需要從本月1日開始按周分組

DDL:

CREATE TABLE `group_by_week` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `date` date DEFAULT NULL,
  `value` int(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `group_by_week`
(`date`,`value`)
VALUES
('2016-01-01',1),
('2016-01-02',2),
('2016-01-03',3),
('2016-01-04',4),
('2016-01-05',5),
('2016-01-06',6),
('2016-01-07',7),
('2016-01-08',8),
('2016-01-09',9),
('2016-01-10',10),
('2016-01-11',11),
('2016-01-12',12),
('2016-01-13',13),
('2016-01-14',14),
('2016-01-15',15),
('2016-01-16',16);

預期結果:

第一周=> 28

第二周=> 77

第三周=> 31

例如:

SELECT CEILING(DATE_FORMAT(date,'%d')/7) w
     , SUM(value) week_total 
  FROM group_by_week 
 GROUP 
    BY w;

顯然,如果處理一個多月以上,則需要稍微擴展邏輯,但是我將其留給讀者練習。

還要注意,“ INT(4)”中的“ 4”是毫無意義的-我非常懷疑它是否可以執行您認為的所有操作。

您可能需要通過將Day部分乘以7來獲得周數,然后可能需要使用FLOOR舍入結果。

如果存在不同月份的日期,則最好添加month name以及周號。 所以我就是這樣做的。 因此,第一列的值將類似於monthname weeknumber 我們可以使用相同的第一列進行group by

詢問

SELECT
  CONCAT(MONTHNAME(`date`), ' week ', FLOOR(((DAY(`date`) - 1) / 7) + 1)) `month & week`, 
  SUM(`value`) AS `value`
FROM `group_by_week`
GROUP BY `month & week`
ORDER BY month(`date`), `month & week`;

結果

+-----------------+-------+
| month & week    | value |
+-----------------+-------+
| January week 1  |  28   |
| January week 2  |  77   |
| January week 3  |  31   |
+-----------------+-------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM