mysql每2天返回一次分组结果

标签 mysql

我有一个事件源,想要查询我的表以获取用户的所有源项目,同时将它们分组为 2 天的间隔。

因此,一个 Feed 项目可能会显示“用户 2 天前做了这些事情”,并且它会显示这些操作的 Feed 项目 ID。

我的问题是,我无法弄清楚如何将每个 Feed 项目放入与 2 天间隔关联的组中。

现在我有 45 个结果,所有结果都在整个月内。我能做的最好的事情就是进行group by,其中我将它们按 2 天的内部分组。但我需要获取结果中的提要 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 项目是在 2015 年 8 月 7 日创建的,则以 dayGroup 的形式向后查看从最新 Feed 事件到 2015 年 8 月 5 日的 2 天,依此类推,直到不再有 Feed 项目。这将根据事件源的实际最新日期进行动态调整。

我的 table 是这样的

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每2天返回一次分组结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31898309/

相关文章:

mysql - 使用 anorm 将多个值和字段插入表中

mysql - 无法从本地连接到 mysql docker

sql - 任何 MySQL 大师出他们?订单后分组(替代子查询)

mysql - 如何统计该类别的产品数量?

mysql - 将 MySQL 列中的值复制到另一列,但已格式化

php - 如何将 mysql php 中的图像显示到 android 中?

php - PHP 中的 MySql 查询问题

mysql - SQL Fiddle Complex Join 什么都不显示

mysql - 在带有 SQLSTATE 的 MySQL 中使用变量作为错误代码

mysql - 如何在数据库字段中按升序对内容进行排序(SQL)