mysql - 获取MYSQL中每个组的Top记录

标签 mysql sql

我在 MYSQL 中有一个表event_log,其中包含以下列,

CREATE TABLE IF NOT EXISTS `event_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` varchar(50) DEFAULT NULL,    
  `event_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

示例数据可以是,

id, customer_id, event_time
1      100       '2015-03-22 23:54:37'    
2      100       '2015-03-21 23:54:37'
3      100       '2015-03-20 23:54:37'  
4      101       '2015-03-19 23:54:37'  
5      102       '2015-03-19 23:54:37'  
6      102       '2015-03-18 23:54:37'  
7      103       '2015-03-17 23:54:37'  
8      103       '2015-03-16 23:54:37'  
9      103       '2015-03-15 23:54:37'  
10     103       '2015-03-14 23:54:37'

我想对 customer_id 进行分组,然后使用 event_time 列(其时间较大)从每个组中选择前 2 条记录

求推荐

谢谢, 费萨尔·纳西尔

最佳答案

这是一个不使用变量的版本:

select el.*
from event_log el
where 2 >= (select count(*)
            from event_log el2
            where el2.customer_id = el.customer_id and
                  el2.event_time >= el.event_time
           );

这甚至可以通过 event_log(customer_id, event_time) 上的索引获得合理的性能。

关于mysql - 获取MYSQL中每个组的Top记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29215075/

相关文章:

php - 从 2 个不适用于 php mysql 的表中选择

mysql - RADIUS 服务器冗余 MySQL

mysql - 绘制和可视化 Mysql 数据的开源解决方案

sql - 如果其他子项未引用父项,则删除父项

sql - ActiveRecord 嵌套 SELECT

mysql - 具有右连接的 SQL View

mysql - 将 MVC++ 与 SQLAPI++ 连接起来

java - 我想在其中备份数据库的桌面应用程序系统

sql - 使用 T-SQL 检索具有许多场景的字符串的一部分

sql - 嵌套查询没有合适的键