需要按周组合从当月的第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);
预期结果:
第1周=> 28
第2周=> 77
第3周=> 31
答案 0 :(得分:0)
E.g:
SELECT CEILING(DATE_FORMAT(date,'%d')/7) w
, SUM(value) week_total
FROM group_by_week
GROUP
BY w;
显然,如果处理超过一个月,你需要稍微扩展逻辑,但我会将其作为读者的练习。
另请注意' 4'在' INT(4)'这是毫无意义的 - 我非常怀疑它会做任何你认为的事情。
答案 1 :(得分:0)
您可能需要通过将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 |
+-----------------+-------+
的 SQL Fiddle Demo
强> 的