2016-12-07 45 views
-1

请告诉如何在不使用嵌套查询的情况下按当前季度的7天进行分组。 它应该是这样的:本季度为7天的MySQL集团

Week_period Date      Clicks 

1   1-10-2016 To 07-10-2016 30 
2   8-10-2016 To 14-10-2016 40 
3   15-10-2016 To 28-10-2016 20 
4   29-10-2016 To 04-11-2016 10 
5   05-11-2016 To 11-11-2016 80 
6   12-11-2016 To 18-11-2016 90 

而且将持续到31-12-2016

CREATE TABLE IF NOT EXISTS `user_click` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `date` datetime NOT NULL 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

感谢您的帮助。我修改了代码如下:

SELECT STR_TO_DATE(CONCAT(YEARWEEK(`date`), ' Sunday'), '%X%V %W') week_start, 
     STR_TO_DATE(CONCAT(YEARWEEK(`date`), ' Saturday'), '%X%V %W') week_end, 
     SUM(id) clicks 
FROM `user_click` where QUARTER(`date`) = QUARTER(CURRENT_DATE()) 
GROUP BY YEARWEEK(`date`) 

但它会给出一个来自九月的日期,这也是不正确的。目前,我正在输出:

week_start  week_end clicks 
2016-09-25 2016-10-01 1 
2016-10-02 2016-10-08 70 

但我想结果取决于如前面所述的天数,即10月1日至十月七日所需要的结果不匹配。请有关这方面

+0

提供你的表结构 – Beginner

+0

@Newbee开发请看看表结构 –

+0

见http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-为什么看起来对我来说是一个非常简单的sql查询 – Strawberry

回答

0

我会尝试按YEARWEEK(日期),所以像这样帮助:

SELECT YEARWEEK("date"), count("id") 
    FROM "user_click" 
GROUP BY YEARWEEK("date"); 

您可能需要皮条客输出一点点,但这个应该做的伎俩。

0

您可以使用YEARWEEK对7天进行分组,另外,您可以使用STR_TO_DATE来获取本周的开始和结束。您可能还需要总结点击次数

SELECT STR_TO_DATE(CONCAT(YEARWEEK(`date`), ' Sunday'), '%X%V %W') week_start, 
     STR_TO_DATE(CONCAT(YEARWEEK(`date`), ' Saturday'), '%X%V %W') week_end, 
     SUM(clicks) clicks 
FROM `user_click` 
WHERE `date` BETWEEN '2016-10-01' AND '2016-12-31' 
GROUP BY YEARWEEK(`date`) 
+0

尝试这里提到的解决方案:http://stackoverflow.com/questions/14379337/group-rows-by-7-天间隔起动-从-A-某些最新 – phobia82

-1

I解决了使用以下查询的问题。谢谢你的时间。

SELECT 1 + DATEDIFF(date, MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) QUARTER - INTERVAL 1 QUARTER) DIV 7 AS weekNumber, MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) QUARTER - INTERVAL 1 QUARTER + INTERVAL (DATEDIFF(date, MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) QUARTER - INTERVAL 1 QUARTER) DIV 7) WEEK AS week_start_date, count(id) 
    FROM 
     user_click 
    WHERE 
     QUARTER(date) = QUARTER(CURRENT_DATE()) AND date >= (MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) QUARTER - INTERVAL 1 QUARTER) 
    GROUP BY 
     DATEDIFF(date, MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) QUARTER - INTERVAL 1 QUARTER) DIV 7 ;