Mysql 来自组的路径
我有以下数据: ╔════╦═══════╦═══════╗ ║ 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║ ╚═══════╩════════════╝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\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,是的,您是对的,谢谢。