为了实现这个需求,我们可以使用MySQL的窗口函数`LEAD()`和`LAG()`。首先,我们需要创建一个临时表,包含每个组成员的信息以及他们的前后组成员。然后,我们可以计算每个人与前后组成员之间的最小间隔。 以下是一个示例SQL查询,假设我们有一个名为`group_members`的表,其中包含`group_id`(组ID)和`member_id`(成员ID)列: ```sql WITH ranked_members AS ( SELECT group_id, member_id, ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY member_id) AS row_num FROM group_members ), adjacent_members AS ( SELECT r1.group_id, r1.member_id AS current_member, r2.member_id AS next_member, r3.member_id AS previous_member FROM ranked_members r1 LEFT JOIN ranked_members r2 ON r1.group_id = r2.group_id AND r1.row_num = r2.row_num - 1 LEFT JOIN ranked_members r3 ON r1.group_id = r3.group_id AND r1.row_num = r3.row_num + 1 ) SELECT group_id, current_member, CASE WHEN next_member IS NOT NULL THEN next_member ELSE previous_member END AS min_separated_member FROM adjacent_members; ``` 这个查询首先使用`ROW_NUMBER()`函数为每个组成员分配一个基于`member_id`的顺序编号。然后,我们通过连接相邻的成员来创建一个新的临时表`adjacent_members`,其中包含当前成员、下一个成员和上一个成员的信息。我们从`adjacent_members`表中选择每个成员与其最近的其他成员,以满足题目要求。 [2024-07-26 14:43:46 | AI写代码神器 | 467点数解答]