首页 > 其他分享 >祖先树统计

祖先树统计

时间:2024-08-15 11:18:14浏览次数:7  
标签:祖先 current BIGINT organization ancestor id 统计

DDL

CREATE TABLE organization_ancestor_id_tree (
    id               BIGINT       NOT NULL COMMENT '对应:smarthse_supervise.organization.id' PRIMARY KEY,
    ancestor_id_tree VARCHAR(100) NULL COMMENT 'id的祖先id树(最近祖先在最左,最远祖先在最右)'
) COMMENT '存放每一个:smarthse_supervise.organization.id,的祖先id树,每日03:00更新。';

PROCEDURE

DELIMITER $$
CREATE PROCEDURE generate_all_organization_ancestor_id_tree()
BEGIN
    /* 定义变量用于遍历所有监管ID */
    DECLARE done BIGINT DEFAULT FALSE;
    DECLARE sid BIGINT;
    DECLARE current_id BIGINT;
    DECLARE prev_id BIGINT;
    DECLARE cur CURSOR FOR SELECT id FROM organization;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    /* 重复执行此存储过程等价于:以最新的数据重新追溯监管id的祖先id树。 */
    TRUNCATE organization_ancestor_id_tree;
    /* 创建一个临时表来存储祖先ID */
    CREATE TEMPORARY TABLE temp_organization_ancestor_id_list (
        id BIGINT
    );
    /* 打开游标 */
    OPEN cur;
    /* 遍历游标 */
    read_loop:
    LOOP
        FETCH cur INTO sid;
        IF done THEN LEAVE read_loop; END IF;
        SET current_id = sid;
        SET prev_id = -1;
        /* 循环检索,获取每个ID的所有祖先 */
        WHILE current_id IS NOT NULL AND current_id != prev_id
            DO
                INSERT INTO temp_organization_ancestor_id_list (id) VALUES (current_id);
                SET prev_id = current_id;
                SELECT pid
                INTO current_id
                FROM organization
                WHERE id = current_id AND pid IS NOT NULL AND pid != 999999999999;
            END WHILE;
        /* 输出所有祖先ID,以逗号分隔 */
        INSERT INTO organization_ancestor_id_tree
        SELECT sid, GROUP_CONCAT(id ORDER BY id DESC SEPARATOR ',') AS ancestor
        FROM temp_organization_ancestor_id_list;
        TRUNCATE temp_organization_ancestor_id_list;
        /* 重置done值 */
        SET done = FALSE;
    END LOOP;
    /* 关闭游标 */
    CLOSE cur;
    /* 删除临时表 */
    DROP TEMPORARY TABLE IF EXISTS temp_organization_ancestor_id_list;
END$$
DELIMITER ;

CALL

CALL generate_all_organization_ancestor_id_tree();

标签:祖先,current,BIGINT,organization,ancestor,id,统计
From: https://www.cnblogs.com/DJOSIMON/p/18360510

相关文章

  • 0232-IP 命令数据统计
    环境Time2022-11-25WSL-Ubuntu22.04前言说明参考:https://docs.kernel.org/networking/statistics.html目标前一节讲了ethtool命令获取网卡和统计信息,ip命令也可以获取一些数据包的信息。显示信息ip-s-slinkshowdevdev_name命令可以显示网卡的统计信息:root......
  • LCA(最近公共祖先)
    参考博客:最近公共祖先算法详解之最近公共祖先(LCA)瓶颈生成树Tarjan算法#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=5e5+10;usingi64=longlong;intn,m,s;vector<int>g[N];vector<pair<int,int>>q[N];boolst[N];intp[N......
  • 【二叉树进阶】--- 二叉搜索树转双向链表 && 最近公共祖先
     Welcometo9ilk'sCodeWorld    (๑•́₃•̀๑) 个人主页:     9ilk(๑•́₃•̀๑) 文章专栏:   数据结构本篇博客我们继续了解一些二叉树的进阶算法。......
  • 成为MySQL DBA后,再看ORACLE数据库(十四、统计信息与执行计划)
    一、前言一条SQL到达数据库内核之后,会解析为一条逻辑执行计划,CBO优化器对逻辑计划进行改写和转换,生成多个物理执行计划。为SQL构造出搜索空间,根据数据的统计信息、基数估计、算子代价模型为搜索空间中的执行计划估算出执行所需要的代价(CPU、内存、网络、I/O等资源消耗),最终选出代......
  • 想把统计表里的数据拆散成多个报表?一文教会你如何将报表数据化整为零
    最近制作报表时遇到了个问题,怎么把整合到一起的订单统计数据拆分成一个个单独的订单统计报表呢?经过一段时间的探索后,我找到了一款完全免费的报表软件,能够解决这个问题,这款软件叫作山海鲸可视化,我会在后面贴出软件的官网网址,大家感兴趣可以自己去试试看。(官网:www.shanhaibi.com/rep......
  • 代码随想录训练营day20|235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450
    二叉搜索树的最近公共祖先题目根据二叉搜索树的特性,它的公共祖先肯定是值夹在p和q之间的(满足此条件的第一个点)TreeNode*getroot(TreeNode*root,TreeNode*p,TreeNode*q){ if(rooot==NULL)returnNULL; if(root->val<p->val&&root->val<q->val){ returngetroot(r......
  • crash+awk:统计vma的大小
    正常的vm命令输出:crash_new>vmPID:2380TASK:ffffff88414bddc0CPU:5COMMAND:"xxx"MMPGDRSSTOTAL_VMffffff880a997c00ffffff882574700016565804k44535380kVMASTARTENDFLAG......
  • InnoDB之统计信息
    一、InnoDB统计信息简介InnoDB统计信息分为持久化统计信息和非持久化统计信息。持久化统计信息将统计信息存储在磁盘(mysql库下),在数据库重启后保证统计信息的持久访问;非持久化统计信息在数据库重启或一些特定操作后会丢失,再次使用该表时会从新计算。innodb_stats_auto_rec......
  • 编写一个程序,打开和读取一个文本文件,并统计文件中每个单词出现的次数。用改进的二叉查
    /编写一个程序,打开和读取一个文本文件,并统计文件中每个单词出现的次数。用改进的二叉查找树存储单词及其出现的次数。程序在读入文件后会提供一个有三个选项菜单。第一个选项是列出所有的单词和出现的次数。第二个选项是让用户输入一个单词,程序报告该单词在文件中出现的次数。......
  • 一款Java 性能监控和统计工具——MyPerf4J!【送源码】
    背景随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。于是公司开始全面推进服务化进程,把团队内的大部分工程师主要精力全部都集中到服务化中。服务化可以让每个工程师仅在自己......