2013-07-02 97 views
0

我想按月显示按月分组的日子,这就是我所做的。按月组的星期几

 
select date(subdate(table1.date1, interval (dayofweek(table1.date1)-2)day)) as OverWeek,count(table1.Id) 
from table1 
where YEAR(table1.date1) = YEAR(CURDATE()) 
AND MONTHNAME(table1.date1) = "June" 
GROUP BY OverWeek 

但是,6月份它显示我7月1日。我猜是因为7月1日,这是星期一,但我不知道如何解决这个问题。

预先感谢您

对于六月为例

 
+------------+ 
| dt   | 
+------------+ 
| 2013-06-01 | 
| 2013-06-08 | 
| 2013-06-15| 
| 2013-06-22 | 
| 2013-06-29 | 
+------------+ 

和2013年6月1日集团2013年6月1日直至2013年6月7日和2013年6月8日2013组-06-08达2013年6月14日....

回答

1

考虑到这组数据...

SELECT * FROM calendar WHERE year(dt) = 2013 AND MONTH(dt) = 6; 
+------------+ 
| dt   | 
+------------+ 
| 2013-06-01 | 
| 2013-06-02 | 
| 2013-06-03 | 
| 2013-06-04 | 
| 2013-06-05 | 
| 2013-06-06 | 
| 2013-06-07 | 
| 2013-06-08 | 
| 2013-06-09 | 
| 2013-06-10 | 
| 2013-06-11 | 
| 2013-06-12 | 
| 2013-06-13 | 
| 2013-06-14 | 
| 2013-06-15 | 
| 2013-06-16 | 
| 2013-06-17 | 
| 2013-06-18 | 
| 2013-06-19 | 
| 2013-06-20 | 
| 2013-06-21 | 
| 2013-06-22 | 
| 2013-06-23 | 
| 2013-06-24 | 
| 2013-06-25 | 
| 2013-06-26 | 
| 2013-06-27 | 
| 2013-06-28 | 
| 2013-06-29 | 
| 2013-06-30 | 
+------------+ 

......像这样的黑客可能会奏效。 ..

SELECT dt FROM calendar WHERE year(dt) = 2013 AND MONTH(dt) = 6 AND MOD(DAY(dt),7)=1 ; 
+0

我已经编辑我的文章 –

+0

好,但是如果是七月,那就不行了 –

+0

糟糕。编辑。我认为它现在应该工作了 - 根据我对规范的现在理解(尽管请注意,在应用程序级代码中处理这种事情可能更明智) – Strawberry

0

SELECT COUNT(table1.Id),OverWeek FROM ( SELECT *, 其中YEAR(table1.date1)= YEAR(CURDATE()) AND MONTHNAME(table1.date1)= “六月” 从订单 )o GROUP BY OverWeek;