我有一个活动供稿,想查询我的表以获取用户的所有供稿项,同时还将它们分为2天的间隔。
因此一个提要项目可能会说“用户2天前做了这些事情”,并且会显示这些操作的提要项目ID。
我的问题是我不知道如何将每个提要项放入与2天间隔相关的组中。
现在我有45个结果,每个月都有。我能做的最好的就是做一个group by
,我将它们按2天的内部时间分组。但我需要在结果中获取Feed ID,而不是计数。
例如
dayGroup | feedId
-------------------
1 | 300
1 | 301
2 | 400
2 | 401
在伪SQL中
select feedId from feeds where userid = 1 and feedType = "action" group by every 2 days
关于日期分组的进一步说明。
如果某个Feed项是在08-07-15上创建的,则从最近的Feed活动向后看2天(作为dayGroup)到08-05-15,依此类推,直到没有其他Feed项为止。根据活动供稿的实际最新日期,这将是动态的。
我的桌子看起来像这样
CREATE TABLE `activity_feed` (
`feed_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`text` varchar(255) DEFAULT NULL,
`data` varchar(255) DEFAULT NULL,
`status` tinyint(1) DEFAULT '0',
`date_created` datetime DEFAULT NULL,
`type` varchar(55) DEFAULT NULL,
`section` varchar(255) DEFAULT NULL,
`data_user_id1` int(11) DEFAULT '0',
`data_user_id2` int(11) DEFAULT '0',
`data_game_id` int(11) DEFAULT '0',
`layout` tinyint(1) DEFAULT '0',
`first_feed_id` int(11) DEFAULT '0',
PRIMARY KEY (`feed_id`),
KEY `idx1` (`user_id`) USING BTREE,
KEY `idx2` (`section`) USING BTREE,
CONSTRAINT `af_fk1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1838 DEFAULT CHARSET=latin1;
最佳答案
模式:
create table dtGrpTwo
( gno int not null, -- group number
dom int not null -- day of month
);
insert dtGrpTwo (gno,dom) values (1,1),(1,2),(2,3),(2,4),(3,5),(3,6),(4,7),(4,8); -- etc up to group 16
create table evts
(
feed_id int auto_increment primary key,
user_id int not null,
feedType varchar(55) not null,
date_created datetime not null
);
-- truncate table evts;
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-11-01');
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-11-02');
insert evts (user_id,feedType,date_created) values (1001,'PULSE','2014-11-02');
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-11-02');
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-11-02');
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-11-05');
insert evts (user_id,feedType,date_created) values (1001,'PULSE','2014-11-05');
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-11-08');
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-12-08');
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-12-08');
insert evts (user_id,feedType,date_created) values (1001,'ACTION','2014-12-08');
insert evts (user_id,feedType,date_created) values (666,'ACTION','2014-11-01');
insert evts (user_id,feedType,date_created) values (666,'ACTION','2014-11-02');
insert evts (user_id,feedType,date_created) values (666,'ACTION','2014-11-02');
查询:
select g.gno as dayGroup,e.feed_id
from dtGrpTwo g
join evts e
on dayofmonth(e.date_created)=g.dom
and e.user_id=1001
and feedType='ACTION'
and e.date_created between '2014-11-01' and '2014-11-30'
order by g.gno,e.feed_id
结果:
+----------+---------+
| dayGroup | feed_id |
+----------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 1 | 5 |
| 3 | 6 |
| 4 | 8 |
+----------+---------+
6 rows in set (0.01 sec)
关于mysql - mysql返回结果每2天分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31898309/