MYSQL按月分组,但不是在每月的第一天

时间:2014-01-24 02:05:26

标签: mysql sql

我的表格投票包含用户在不同时间进行的投票:

id  item_id position    user_id created_at
1   2   0   1   11/21/2013 11:27
26  1   1   1   11/21/2013 11:27
27  3   2   1   11/21/2013 11:27
42  2   2   1   12/7/2013 2:20
41  3   1   1   12/7/2013 2:20
40  1   0   1   12/7/2013 2:20
67  2   2   1   12/13/2013 1:13
68  1   1   1   12/13/2013 1:13
69  3   0   1   12/13/2013 1:13
84  2   0   1   12/28/2013 2:29
83  3   2   1   12/28/2013 2:29
82  1   1   1   12/28/2013 2:29
113 3   0   1   1/17/2014 22:08
114 1   1   1   1/17/2014 22:08
115 2   2   1   1/17/2014 22:08
138 2   0   1   1/20/2014 16:49
139 1   1   1   1/20/2014 16:49
140 3   2   1   1/20/2014 16:49
141 1   1   11  1/20/2014 16:51
142 3   2   11  1/20/2014 16:51
143 2   0   11  1/20/2014 16:51

我需要按月计算结果,但这里是棘手的部分:月份的开始/结束不一定落在月份的第一天。因此,如果在每个月的第10天投票到期,我需要在10日投票,与11日投票的不同组进行投票。使用上面的数据,我想得到三组:

第1组:6票(11/21和12/7) 第2组:6票(12 / 13,12 / 28) 第3组:9票(1 / 17,1 / 20)

我尝试过很多方法,但无济于事。这是我现在的问题:

select created_at, ADDDATE(DATE_FORMAT(created_at, '%Y-%m-01'),interval 10 day) as duedate,count("id") from votes where list_id = 2 group by duedate

我的团体规模分别为3,9和9,而不是6,6和9.我们非常感谢您提供的任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您的查询已结束。您只需要从当天减去9天(10 - 1)即可获得月份:

select created_at, date_sub(created_at, interval 9 day) as duedate,
       count(id)
from votes
where list_id = 2
group by duedate;

date_format()将日期转换为字符串。无需将日期值转换为此查询的字符值。

编辑:

按月分组:

select date_format(date_sub(created_at, interval 9 day), '%Y-%m') as YYYYMM,
       count(id)
from votes
where list_id = 2
group by YYYYMM;