1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| select json_unquote(json_extract(form_data, '$.crm_audit_no')) as `auditNo`, json_unquote(json_extract(form_data, '$.crm_title')) as `title`, substring_index( substring_index( json_unquote(json_extract(form_data, '$.crm_abstracts')), ',', 1 ), ':', -1 ) serviceSubjectName, substring_index( substring_index( json_unquote(json_extract(form_data, '$.crm_abstracts')), ',', -1 ), ':', -1 ) taxType, c.taxUserId, c.commerceUserId, case WHEN pir.audit_status = "1" THEN "待审核" WHEN pir.audit_status = "2" THEN "审核通过" WHEN pir.audit_status = "3" THEN "审核驳回" WHEN pir.audit_status = "4" THEN "终止审批" END as `auditStatus`, pir.user_id as `createId`, pir.create_time as createTime, pir.end_time as endTime from process_instance_record pir left join ( SELECT t.id, max( case when j.userType = '24' then j.userId end ) as taxUserId, max( case when j.userType = '61' then j.userId end ) as commerceUserId FROM process_instance_record t, JSON_TABLE( JSON_EXTRACT( JSON_UNQUOTE(JSON_EXTRACT(t.form_data, '$.crm_param')), '$.userDTOList' ), '$[*]' COLUMNS ( userId bigint PATH '$.userId', serviceFollowType VARCHAR(10) PATH '$.serviceFollowType', userType VARCHAR(10) PATH '$.userType', yqPhone VARCHAR(20) PATH '$.yqPhone' ) ) AS j WHERE j.userType in ('24', '61') GROUP BY t.id ) as c on pir.id = c.id where ( pir.crm_flow_type in ('4', '20') or json_unquote(json_extract(pir.form_data, '$.crm_flow_type')) in ('4', '20') ) and pir.create_time >= '2026-07-01 00:00:00' and pir.create_time <= '2026-07-23 23:59:59'
filtered_pir:先筛出目标时间、目标流程类型的 380 条流程记录 ↓ user_summary:只解析这 380 条记录中的 userDTOList JSON ↓ 最终查询:把人员汇总结果关联回来
explain analyze WITH filtered_pir AS ( SELECT * FROM process_instance_record WHERE ( crm_flow_type IN ('4', '20') OR JSON_UNQUOTE(JSON_EXTRACT(form_data, '$.crm_flow_type')) IN ('4', '20') ) AND create_time >= '2026-07-01 00:00:00' AND create_time < '2026-07-24 00:00:00' ), user_summary AS ( SELECT pir.id, MAX(CASE WHEN j.userType = '24' THEN j.userId END) AS taxUserId, MAX(CASE WHEN j.userType = '61' THEN j.userId END) AS commerceUserId FROM filtered_pir pir JOIN JSON_TABLE( JSON_EXTRACT( JSON_UNQUOTE(JSON_EXTRACT(pir.form_data, '$.crm_param')), '$.userDTOList' ), '$[*]' COLUMNS ( userId BIGINT PATH '$.userId', userType VARCHAR(10) PATH '$.userType' ) ) AS j ON j.userType IN ('24', '61') GROUP BY pir.id ) SELECT JSON_UNQUOTE(JSON_EXTRACT(pir.form_data, '$.crm_audit_no')) AS auditNo, JSON_UNQUOTE(JSON_EXTRACT(pir.form_data, '$.crm_title')) AS title, SUBSTRING_INDEX( SUBSTRING_INDEX( JSON_UNQUOTE(JSON_EXTRACT(pir.form_data, '$.crm_abstracts')), ',', 1 ), ':', -1 ) AS serviceSubjectName, SUBSTRING_INDEX( SUBSTRING_INDEX( JSON_UNQUOTE(JSON_EXTRACT(pir.form_data, '$.crm_abstracts')), ',', -1 ), ':', -1 ) AS taxType, c.taxUserId, c.commerceUserId, CASE pir.audit_status WHEN '1' THEN '待审核' WHEN '2' THEN '审核通过' WHEN '3' THEN '审核驳回' WHEN '4' THEN '终止审批' END AS auditStatus, pir.user_id AS createId, pir.create_time AS createTime, pir.end_time AS endTime FROM filtered_pir pir LEFT JOIN user_summary c ON c.id = pir.id;
|