Mysql 来自组的路径

Mysql 来自组的路径,mysql,sql,group-by,Mysql,Sql,Group By,我有以下数据: ╔════╦═══════╦═══════╗ ║ id ║ group ║ place ║ ╠════╬═══════╬═══════╣ ║ 1 ║ 1 ║ a ║ ║ 2 ║ 1 ║ b ║ ║ 3 ║ 1 ║ b ║ ║ 4 ║ 1 ║ a ║ ║ 5 ║ 1 ║ c ║ ║ 6 ║ 2 ║ a ║ ║ 7 ║ 2 ║ b ║ ║ 8 ║ 2

我有以下数据:

╔════╦═══════╦═══════╗ ║ id ║ group ║ place ║ ╠════╬═══════╬═══════╣ ║ 1 ║ 1 ║ a ║ ║ 2 ║ 1 ║ b ║ ║ 3 ║ 1 ║ b ║ ║ 4 ║ 1 ║ a ║ ║ 5 ║ 1 ║ c ║ ║ 6 ║ 2 ║ a ║ ║ 7 ║ 2 ║ b ║ ║ 8 ║ 2 ║ c ║ ╚════╩═══════╩═══════╝ ╔════╦═══════╦═══════╗ ║ 身份证件║ 团体║ 放置║ ╠════╬═══════╬═══════╣ ║ 1.║ 1.║ A.║ ║ 2.║ 1.║ B║ ║ 3.║ 1.║ B║ ║ 4.║ 1.║ A.║ ║ 5.║ 1.║ C║ ║ 6.║ 2.║ A.║ ║ 7.║ 2.║ B║ ║ 8.║ 2.║ C║ ╚════╩═══════╩═══════╝ 如何获取MySQL中每个组的路径

预期结果是:

╔═══════╦════════════╗ ║ group ║ path ║ ╠═══════╬════════════╣ ║ 1 ║ a-b-a-c ║ ║ 2 ║ a-b-c ║ ╚═══════╩════════════╝ ╔═══════╦════════════╗ ║ 团体║ 路径║ ╠═══════╬════════════╣ ║ 1.║ a-b-a-c║ ║ 2.║ a-b-c║ ╚═══════╩════════════╝
假设最终目标是按
id
排序,然后简化每个组的顺序,使连续重复的位置只显示一次:

首先,确定每行的位置或组自上一行以来是否发生了更改。这个问题有一个很好的解决办法

然后使用
GROUP\u CONCAT
将这些位置合并到一个路径中

请注意,
GROUP\u CONCAT
具有用户可配置的最大长度,默认情况下为1024个字符

SELECT 
    `group`,
    GROUP_CONCAT(place ORDER BY id SEPARATOR '-') path
FROM
    (SELECT 
        COALESCE(@place != place OR @group != `group`, 1) changed,
        id,
        @group:=`group` `group`,
        @place:=place place
    FROM
        place_table, (SELECT @place:=NULL, @group:=NULL) s
    ORDER BY `group`, id) t
WHERE
    changed = 1
GROUP BY `group`;

Group_concat distinctAm I更正,当按
id
排序时,如果
位置
在同一
的一行中出现多次,则该位置应仅在
路径
中出现一次,而如果
位置
再次不连续出现,则应在
路径中?例如,如果序列是
a-a-b-b-a-b-b-c
,则应简化为
a-b-a-b-c
?@MattRaines,是的,您是对的,谢谢。