包括限制在group by子句中选择前n行的限制

问题描述 投票:2回答:1

我有以下两个表:

create table1
(
   SENDER int,
   RECEIVER int,
   TIME time,
   TYPE char(1)
);

create table2
(
   ID int,
   Y int,
   CONTACT int,
   DATE time
);

我正在执行以下联接查询:

SELECT B.ID, A.RECEIVER AS Z, A.SENDER AS CONTACT, A.TYPE, A.TIME
FROM table1 A 
JOIN table2 B ON A.RECEIVER = B.CONTACT 
WHERE A.TYPE = 'A'
   AND A.TIME < B.DATE

如何修改查询以使用(ID,CONTACT)仅返回每个GROUP BY对的前40个结果?

我可以使用字段table2.DATE排序数据

mysql greatest-n-per-group
1个回答
0
投票

因为我想要每个ID的前40个结果,所以我将ID,autoId用作主键,这里的autoId是自动递增的键。因此,在执行以下查询后:SELECT B.ID, A.RECEIVER AS Z, A.SENDER AS CONTACT, A.TYPE, A.TIME FROM table1 A JOIN table2 B ON A.RECEIVER = B.CONTACT WHERE A.TYPE = 'A' AND A.TIME < B.DATE我得到的结果是,每个ID的autoId初始化为1例如:

ID CONTACT autoId1 2 21 3 21 11 31 34 42 5 5 12 3 332 56 3 3>

由于autoId是自动增量,因此已经有一个索引。创建此表后,我可以轻松删除autoId大于40的结果。而此过程运行得非常快!

© www.soinside.com 2019 - 2024. All rights reserved.