MySQL根据分组条件使用分组方式后,如果需要可以进一步拆分组吗

MySQL根据分组条件使用分组方式后,如果需要可以进一步拆分组吗,mysql,sql,Mysql,Sql,所以我希望我能把我的问题解释清楚 我想知道是否有一种方法可以根据分组条件进一步拆分分组(如果需要) create Table if NOT EXISTS click_action ( cid int(3) NOT NULL, session_id int(5) NOT NULL, click_val int NOT NULL, PRIMARY KEY(cid) ); INSERT INTO click_action (cid, session_id, click_val)

所以我希望我能把我的问题解释清楚

我想知道是否有一种方法可以根据分组条件进一步拆分分组(如果需要)

create Table if NOT EXISTS click_action (
  cid int(3) NOT NULL,
  session_id int(5) NOT NULL,
  click_val int NOT NULL,
  PRIMARY KEY(cid)
 );
 
INSERT INTO click_action (cid, session_id, click_val)
  VALUES (111, 12345, 2),
(121, 12345, 3),
(131, 12345, 4),
(141, 12344, 2),
(151, 12344, 3),
(161, 12344, 8),
(171, 12344, 9)
在上面,我设置了一个带有cid、会话id的小表,单击“val”并将cid用作主键。我在CREATETABLE语句下插入一些测试值。我想生成一个查询,该查询将按会话id分组,并返回随机生成的会话分组id,即分组中的最大单击值和最小单击值。但是,在按会话id分组之后。我希望确保每个分组中排序的click val值之间没有大于3的巨大差距。如果有的话,我们就在两者之间分道扬镳

例如,给定我插入的测试值。若我们首先按会话_id分组,我们可以得到第一个具有cid 111、121和131的组。如果我们检查值为3、4和5的组中的点击值,我们发现没有大于3的间隙,因此可以接受该组。然而,在使用会话id 12344的第二个分组中,我们可以使用cid值141、151、161和171进行分组。但是,如果我们想检查间隙,我们首先根据click val进行排序,得到2,3,8,9。然后我们可以发现在值3和8之间有一个大于3的click val间隙。因此,当发生这种情况时,我希望我的查询将此组拆分为cid 141、151和另一个cid 161171的组

将返回的最终查询应该是

random id, 3, 4
random id, 2, 3
random id, 8, 9
我已经有一段时间被这个问题困扰了,我想知道如何才能做到这一点,或者是否有我不知道的内置SQL函数可以帮助我解决这个任务?

cte1作为选择cid,会话id,单击值, 单击\u val-合并单击按会话id划分的分区\u val按cid排序,-3>3太宽\u 从单击操作, cte2作为选择cid,会话id,单击确认, 按会话id、cid随机id排序的SUMtoo\u超宽 来自cte1 选择随机id、会话id、最小单击值、最大单击值 来自cte2 按随机id、会话id分组; 如果您想拥有真正的随机id值,则需要另外生成它们并检查其唯一性