如何在MySQL中创建视图统计父子对象组的起止日期与对象总数
需求完全可以实现,使用 MySQL 8.0+/MariaDB 10.2+ 原生支持的递归CTE(公用表表达式)即可完成树形结构的遍历聚合,具体实现代码如下:
CREATE OR REPLACE VIEW object_group_view AS WITH RECURSIVE object_hierarchy AS ( -- 锚点成员:取所有根节点,记录根ID作为分组唯一标识 SELECT id AS node_id, id AS group_root_id, foreign_key, start_date, end_date FROM objects WHERE parent_id = 0 UNION ALL -- 递归成员:遍历所有子节点,继承所属根分组的ID SELECT o.id AS node_id, oh.group_root_id, o.foreign_key, o.start_date, o.end_date FROM objects o INNER JOIN object_hierarchy oh ON o.parent_id = oh.node_id ) -- 按根分组聚合计算对应指标 SELECT ROW_NUMBER() OVER (ORDER BY group_root_id) AS id, foreign_key, MIN(start_date) AS start_date, MAX(end_date) AS end_date, COUNT(*) AS number_of_objects FROM object_hierarchy GROUP BY group_root_id, foreign_key;
执行上述语句创建视图后,直接运行SELECT * FROM object_group_view即可得到你预期的返回结果。
如果你的对象层级超过默认递归深度(默认1000),可以执行SET SESSION cte_max_recursion_depth = 10000;调整会话级的递归深度限制。
内容的提问来源于stack exchange,提问作者Josh Dredge
相关产品推荐
相关产品推荐

