背景:
在正规的宠物繁育体系中,记录宠物的血统和族谱至关重要,这不仅是为了证明其品种的纯正,更重要的是为了排查和预防遗传性疾病。现有一家大型宠物繁育协会,记录了注册宠物猫的基本信息以及它们的繁育后代记录。近期发现一只名为Luna的母猫携带了某种隐性遗传病基因。为了通知相关的饲主进行健康检查,协会需要追溯Luna的所有直系后代(包括子女、孙辈、曾孙辈等)。
表结构和字段说明:
-
表名:cats(宠物猫信息表)
- cat_id:整数类型,宠物猫的唯一注册编号,主键
- cat_name:字符串类型,宠物猫的呼名(名字)
- breed:字符串类型,宠物猫的品种(如缅因猫、布偶猫等)
-
表名:breeding_records(繁育记录表)
- parent_cat_id:整数类型,父母猫的注册编号(即繁育者)
- child_cat_id:整数类型,子代猫的注册编号(即后代)
- birth_date:日期类型,子代猫的出生日期
- health_score:浮点数类型,子代猫出生时的健康评分(满分100)
3.问题
请编写一条 MySQL 查询语句,查出由名为'Luna'的宠物猫繁育出的所有直接和间接后代。
查询条件限制:
- 仅统计出生日期(birth_date)在 2025年1月1日至2025年12月31日期间的后代(注意:如果中间某一代的出生日期不在2025年,也会导致该分支的追溯中断,实际查询中需确保递归链路上的繁育记录满足日期要求)。
- 在结果中,需要计算出每一只后代猫的“综合健康评估指数”(composite_index),计算公式为:基础健康评分(health_score) * (0.95 ^ 世代代数)。其中直接子女的世代代数为1,孙辈为2,以此类推。该指数需四舍五入保留2位小数。
返回字段要求:
- descendant_id:后代猫的注册编号
- descendant_name:后代猫的呼名
- generation:世代代数(子女为1,孙辈为2,依此类推)
- composite_index:综合健康评估指数(四舍五入保留2位小数)
排序规则:
结果须首先按世代代数(generation)进行升序排列;若世代代数相同,则按综合健康评估指数(composite_index)进行降序排列;若综合健康评估指数也相同,则按后代猫的注册编号(descendant_id)进行升序排列。
