ai_member_xiaoxi/memory/2026-05-22-1613.md
2026-05-23 08:00:01 +08:00

3.8 KiB
Raw Blame History

Session: 2026-05-22 16:13:10 GMT+8

  • Session Key: agent:main:feishu:direct:ou_e63ce6b760ad39382852472f28fbe2a2
  • Session ID: dbdc6c92-8180-47bf-9e02-b7672f5586d2
  • Source: feishu

Conversation Summary

user: 帮我跑一个数据我想看每一个角色每一节课的完课时间。帮我输出成excel用户ID、角色ID、课程ID、课程名称、完课耗时、是否首通。有什么问题可以问我。 assistant: 李承龙你好!在开始之前,我需要确认几个关键问题:

  1. 数据范围是所有历史数据还是限定某个时间段比如最近一个月、某个具体日期范围数据量可能比较大明确范围可以避免Excel过大。

  2. "完课耗时"的定义:是指每次完成这节课的实际耗时(同一角色同一课时多次完成会有多条记录),还是只取首次完成的耗时

  3. "是否首通"的定义:是指"该角色第一次完成这个课时"即为首通,后面的完成为非首通?这个理解对吗?

  4. 课程名称:用 L1 S0 U00 L01 这种格式展示可以吗?

你确认后我马上开始跑数据。 user: 1、所有历史数据剔除测试账号和删除掉的账号。 2、每次完成都单独生成一个完成耗时分别列出。 3、对的。 4、可以然后不需要课程ID这一列了。 assistant: 好的,明确了。我先确认数据库和表结构,然后开始跑数据。 assistant: 数据量合理:~22万条完成记录、~2.9M条组件记录。我现在写Python脚本跑数据并导出Excel。 assistant: 数据已导出完成。现在把文件发给你。 assistant: 文件已发送。再同步发一条说明: assistant: 数据已导出并发送给你了,李承龙。汇总一下:

指标 数值
总记录数 117,945 条
首通记录 112,505 条
重复完成 5,440 条

文件包含 5 列用户ID、角色ID、课程名称L1 S0 U00 L01、完课耗时分钟保留1位小数、是否首通。所有历史数据已剔除测试账号和删除账号每次完成记录都单独列出按用户→角色→课程排列。 user: 给我看看你统计完课耗时的逻辑和代码 assistant: 核心逻辑如下:

完课耗时统计逻辑

数据来源

  • 课时完成记录bi_user_chapter_play_record_0~78张分表UNION ALL筛选 play_status = 1(正常完成)
  • 组件耗时bi_user_component_play_record_0~78张分表interval_time 字段,单位毫秒
  • 关联:通过 chapter_unique_id 将课时记录与组件耗时关联

计算步骤

  1. 组件耗时聚合:对 8 张 component 分表按 chapter_unique_id 分组,SUM(interval_time) 得到该次课时完成的总耗时(毫秒)
  2. 有效记录筛选chapter 表 JOIN bi_vala_app_characterbi_vala_app_account,过滤 status=1 AND deleted_at IS NULL(剔除测试/删除账号)
  3. 课程名称JOIN bi_level_unit_lesson,拼接 course_level + course_season + course_unit + course_lesson
  4. 耗时转换总毫秒数 / 60000,保留 1 位小数 = 分钟
  5. 首通标记:窗口函数 MIN(created_at) OVER (PARTITION BY character_id, chapter_id),每条记录的 created_at 等于该角色+课时的最早时间则为"首通"

完整代码: assistant: 整个脚本就是上面的内容。核心要点:

  • 耗时源头bi_user_component_play_record.interval_time(毫秒),按 chapter_unique_id 聚合求和,除以 60000 转分钟
  • 首通判定:同一角色同一 chapter_id 下,created_at 最早的那条 = 首通,其余 = 非首通
  • 数据过滤:只保留 play_status=1(课时正常完成),且账号 status=1 + deleted_at IS NULL(剔除测试/删除账号)

有什么需要调整的地方随时说。