我的表格投票包含用户在不同时间进行的投票:
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.我们非常感谢您提供的任何帮助。感谢。
答案 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;