[英]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.