我在 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/