🤖 每日自动备份 - 2026-05-18 08:00:01
This commit is contained in:
parent
ac4e2eb3ce
commit
8d77e036c5
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"updatedAt": "2026-05-15T09:14:59.142Z",
|
"updatedAt": "2026-05-17T05:10:46.252Z",
|
||||||
"entries": {
|
"entries": {
|
||||||
"memory:memory/2026-05-06.md:1:20": {
|
"memory:memory/2026-05-06.md:1:20": {
|
||||||
"key": "memory:memory/2026-05-06.md:1:20",
|
"key": "memory:memory/2026-05-06.md:1:20",
|
||||||
@ -42,20 +42,22 @@
|
|||||||
"endLine": 30,
|
"endLine": 30,
|
||||||
"source": "memory",
|
"source": "memory",
|
||||||
"snippet": "- **订单号格式问题:** Excel 科学计数法 → 设置单元格为文本格式解决 - **psycopg2 转义:** LIKE 中 `%` 需写成 `%%`(psycopg2 的 `%s` 占位符冲突) ## 任务2:销售线索用户分析报表 - [李承龙需求] 输入包含462个用户ID的Excel,输出每个用户+角色的完整画像报表 - 脚本路径:`/root/.openclaw/workspace/scripts/lead_user_analysis.py` - **重要口径修正(李承龙确认):** - **体验课定义:** 固定为 L1 U00(L01-L05) + L2 U00(L01-L05) 共10节课,**不通过 expire_time 区分** - L1 chapter_id: 343, 344, 345, 346, 348 - L2 chapter_id: 55, 56, 57, 58, 59 - **完成时间:** 取 `bi_user_chapter_play_record` 中 `play_status=1` 记录的**最早 `updated_at`**(非 `created_at`) - **报表列:** 用户ID、角色ID、用户注册时间、角色创建时间、L1序章5节完成时间、L2序章5节完成时间、购买时间、购买课包名称、支付金额、购买渠道key_from、是否退款、退款金额 - **分表规则:** `bi_user_chapter_play_record_{0..7}`,分表号 = user_id % 8 - **重要关联:** `b",
|
"snippet": "- **订单号格式问题:** Excel 科学计数法 → 设置单元格为文本格式解决 - **psycopg2 转义:** LIKE 中 `%` 需写成 `%%`(psycopg2 的 `%s` 占位符冲突) ## 任务2:销售线索用户分析报表 - [李承龙需求] 输入包含462个用户ID的Excel,输出每个用户+角色的完整画像报表 - 脚本路径:`/root/.openclaw/workspace/scripts/lead_user_analysis.py` - **重要口径修正(李承龙确认):** - **体验课定义:** 固定为 L1 U00(L01-L05) + L2 U00(L01-L05) 共10节课,**不通过 expire_time 区分** - L1 chapter_id: 343, 344, 345, 346, 348 - L2 chapter_id: 55, 56, 57, 58, 59 - **完成时间:** 取 `bi_user_chapter_play_record` 中 `play_status=1` 记录的**最早 `updated_at`**(非 `created_at`) - **报表列:** 用户ID、角色ID、用户注册时间、角色创建时间、L1序章5节完成时间、L2序章5节完成时间、购买时间、购买课包名称、支付金额、购买渠道key_from、是否退款、退款金额 - **分表规则:** `bi_user_chapter_play_record_{0..7}`,分表号 = user_id % 8 - **重要关联:** `b",
|
||||||
"recallCount": 2,
|
"recallCount": 3,
|
||||||
"dailyCount": 0,
|
"dailyCount": 0,
|
||||||
"groundedCount": 0,
|
"groundedCount": 0,
|
||||||
"totalScore": 1.983596316357381,
|
"totalScore": 2.983596316357381,
|
||||||
"maxScore": 1,
|
"maxScore": 1,
|
||||||
"firstRecalledAt": "2026-05-07T04:41:47.636Z",
|
"firstRecalledAt": "2026-05-07T04:41:47.636Z",
|
||||||
"lastRecalledAt": "2026-05-13T08:20:55.037Z",
|
"lastRecalledAt": "2026-05-17T05:10:46.252Z",
|
||||||
"queryHashes": [
|
"queryHashes": [
|
||||||
"dd105d141c56",
|
"dd105d141c56",
|
||||||
"4cacd0d43440"
|
"4cacd0d43440",
|
||||||
|
"1dc41fdf5e74"
|
||||||
],
|
],
|
||||||
"recallDays": [
|
"recallDays": [
|
||||||
"2026-05-07",
|
"2026-05-07",
|
||||||
"2026-05-13"
|
"2026-05-13",
|
||||||
|
"2026-05-17"
|
||||||
],
|
],
|
||||||
"conceptTags": [
|
"conceptTags": [
|
||||||
"l01-l05",
|
"l01-l05",
|
||||||
|
|||||||
110
scripts/l1l2_users_study_breakdown.sql
Normal file
110
scripts/l1l2_users_study_breakdown.sql
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
-- L1+L2用户(821人)上周学习情况:仅学L1 / 仅学L2 / 都学了
|
||||||
|
|
||||||
|
WITH last_week_active_chars AS (
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_0 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_1 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_2 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_3 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_4 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_5 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_6 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_7 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
),
|
||||||
|
last_week_active_accounts AS (
|
||||||
|
SELECT DISTINCT c.account_id
|
||||||
|
FROM last_week_active_chars lw
|
||||||
|
JOIN bi_vala_app_character c ON lw.user_id = c.id
|
||||||
|
),
|
||||||
|
paying_active AS (
|
||||||
|
SELECT DISTINCT lw.account_id
|
||||||
|
FROM last_week_active_accounts lw
|
||||||
|
WHERE EXISTS (
|
||||||
|
SELECT 1 FROM bi_vala_order o
|
||||||
|
JOIN bi_vala_app_account a ON o.account_id = a.id AND a.status = 1
|
||||||
|
WHERE o.account_id = lw.account_id
|
||||||
|
AND o.order_status IN (3, 4)
|
||||||
|
AND o.pay_success_date IS NOT NULL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
user_goods AS (
|
||||||
|
SELECT o.account_id, o.goods_id
|
||||||
|
FROM bi_vala_order o
|
||||||
|
JOIN paying_active pa ON o.account_id = pa.account_id
|
||||||
|
WHERE o.order_status IN (3, 4) AND o.pay_success_date IS NOT NULL
|
||||||
|
),
|
||||||
|
l1l2_accounts AS (
|
||||||
|
SELECT account_id
|
||||||
|
FROM user_goods
|
||||||
|
GROUP BY account_id
|
||||||
|
HAVING bool_or(goods_id = 61) OR (bool_or(goods_id IN (57, 60, 63)) AND bool_or(goods_id IN (31, 32, 33, 54)))
|
||||||
|
),
|
||||||
|
l1l2_chars AS (
|
||||||
|
SELECT c.id AS user_id, c.account_id
|
||||||
|
FROM bi_vala_app_character c
|
||||||
|
JOIN l1l2_accounts a ON c.account_id = a.account_id
|
||||||
|
),
|
||||||
|
last_week_chapters AS (
|
||||||
|
SELECT p.user_id, p.chapter_id
|
||||||
|
FROM bi_user_chapter_play_record_0 p
|
||||||
|
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.user_id, p.chapter_id
|
||||||
|
FROM bi_user_chapter_play_record_1 p
|
||||||
|
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.user_id, p.chapter_id
|
||||||
|
FROM bi_user_chapter_play_record_2 p
|
||||||
|
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.user_id, p.chapter_id
|
||||||
|
FROM bi_user_chapter_play_record_3 p
|
||||||
|
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.user_id, p.chapter_id
|
||||||
|
FROM bi_user_chapter_play_record_4 p
|
||||||
|
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.user_id, p.chapter_id
|
||||||
|
FROM bi_user_chapter_play_record_5 p
|
||||||
|
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.user_id, p.chapter_id
|
||||||
|
FROM bi_user_chapter_play_record_6 p
|
||||||
|
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
|
||||||
|
UNION ALL
|
||||||
|
SELECT p.user_id, p.chapter_id
|
||||||
|
FROM bi_user_chapter_play_record_7 p
|
||||||
|
WHERE p.play_status = 1 AND p.created_at >= '2026-05-11' AND p.created_at < '2026-05-18'
|
||||||
|
),
|
||||||
|
chapter_with_level AS (
|
||||||
|
SELECT DISTINCT c.account_id, bl.course_level
|
||||||
|
FROM last_week_chapters lw
|
||||||
|
JOIN l1l2_chars c ON lw.user_id = c.user_id
|
||||||
|
JOIN bi_level_unit_lesson bl ON lw.chapter_id = bl.id
|
||||||
|
WHERE bl.course_level IN ('L1', 'L2')
|
||||||
|
),
|
||||||
|
user_level_study AS (
|
||||||
|
SELECT
|
||||||
|
account_id,
|
||||||
|
bool_or(course_level = 'L1') AS studied_l1,
|
||||||
|
bool_or(course_level = 'L2') AS studied_l2
|
||||||
|
FROM chapter_with_level
|
||||||
|
GROUP BY account_id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN studied_l1 AND studied_l2 THEN 'L1和L2都学了'
|
||||||
|
WHEN studied_l1 THEN '仅学了L1'
|
||||||
|
WHEN studied_l2 THEN '仅学了L2'
|
||||||
|
END AS study_type,
|
||||||
|
COUNT(*) AS user_count
|
||||||
|
FROM user_level_study
|
||||||
|
GROUP BY 1
|
||||||
|
ORDER BY 1;
|
||||||
71
scripts/weekly_active_paying_users.sql
Normal file
71
scripts/weekly_active_paying_users.sql
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
-- 上周(2026-05-11~2026-05-17)有课消的付费用户,按 L1/L2 分类
|
||||||
|
|
||||||
|
WITH last_week_active_chars AS (
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_0 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_1 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_2 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_3 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_4 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_5 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_6 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
UNION
|
||||||
|
SELECT DISTINCT user_id FROM bi_user_chapter_play_record_7 WHERE play_status = 1 AND created_at >= '2026-05-11' AND created_at < '2026-05-18'
|
||||||
|
),
|
||||||
|
last_week_active_accounts AS (
|
||||||
|
SELECT DISTINCT c.account_id
|
||||||
|
FROM last_week_active_chars lw
|
||||||
|
JOIN bi_vala_app_character c ON lw.user_id = c.id
|
||||||
|
),
|
||||||
|
paying_active AS (
|
||||||
|
SELECT DISTINCT lw.account_id
|
||||||
|
FROM last_week_active_accounts lw
|
||||||
|
WHERE EXISTS (
|
||||||
|
SELECT 1 FROM bi_vala_order o
|
||||||
|
JOIN bi_vala_app_account a ON o.account_id = a.id AND a.status = 1
|
||||||
|
WHERE o.account_id = lw.account_id
|
||||||
|
AND o.order_status IN (3, 4)
|
||||||
|
AND o.pay_success_date IS NOT NULL
|
||||||
|
)
|
||||||
|
),
|
||||||
|
user_goods_agg AS (
|
||||||
|
SELECT
|
||||||
|
pa.account_id,
|
||||||
|
array_agg(DISTINCT o.goods_id) AS goods_ids
|
||||||
|
FROM paying_active pa
|
||||||
|
JOIN bi_vala_order o ON pa.account_id = o.account_id
|
||||||
|
WHERE o.order_status IN (3, 4)
|
||||||
|
AND o.pay_success_date IS NOT NULL
|
||||||
|
GROUP BY pa.account_id
|
||||||
|
),
|
||||||
|
classified AS (
|
||||||
|
SELECT
|
||||||
|
account_id,
|
||||||
|
CASE
|
||||||
|
WHEN 61 = ANY(goods_ids) THEN 'L1+L2'
|
||||||
|
WHEN (57 = ANY(goods_ids) OR 60 = ANY(goods_ids) OR 63 = ANY(goods_ids))
|
||||||
|
AND (31 = ANY(goods_ids) OR 32 = ANY(goods_ids) OR 33 = ANY(goods_ids) OR 54 = ANY(goods_ids))
|
||||||
|
THEN 'L1+L2'
|
||||||
|
WHEN 57 = ANY(goods_ids) OR 60 = ANY(goods_ids) OR 63 = ANY(goods_ids) THEN '仅L1'
|
||||||
|
WHEN 31 = ANY(goods_ids) OR 32 = ANY(goods_ids) OR 33 = ANY(goods_ids) OR 54 = ANY(goods_ids) THEN '仅L2'
|
||||||
|
ELSE '其他'
|
||||||
|
END AS level_type
|
||||||
|
FROM user_goods_agg
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level_type,
|
||||||
|
COUNT(*) AS user_count
|
||||||
|
FROM classified
|
||||||
|
GROUP BY level_type
|
||||||
|
ORDER BY
|
||||||
|
CASE level_type
|
||||||
|
WHEN '仅L1' THEN 1
|
||||||
|
WHEN '仅L2' THEN 2
|
||||||
|
WHEN 'L1+L2' THEN 3
|
||||||
|
WHEN '其他' THEN 4
|
||||||
|
END;
|
||||||
Loading…
Reference in New Issue
Block a user