select log_id, user_id,finish_time,send_finish_msg,sop_id,video_id,reward_type, log_type, create_time,
update_time, qw_external_contact_id, duration, qw_user_id, company_user_id, company_id, course_id,
camp_period_time,project,period_id,watch_type from fs_course_watch_log
and user_id = #{userId}
and video_id = #{videoId}
and log_type = #{logType}
and qw_external_contact_id = #{qwExternalContactId}
and duration = #{duration}
and qw_user_id = #{qwUserId}
and company_user_id = #{companyUserId}
and company_id = #{companyId}
and course_id = #{courseId}
and send_type = #{sendType}
and camp_period_time = #{campPeriodTime}
and project = #{project}
and watch_type = #{watchType}
where log_id = #{logId}
select l.log_id,l.project,l.period_id,l.user_id,uc.course_name,v.title as video_name,qec.avatar as external_user_avatar,qec.status as externalStatus,
l.log_type,SEC_TO_TIME(l.duration) as duration,c.company_name,l.camp_period_time,l.finish_time,
cu.nick_name as company_user_name ,l.send_type,l.create_time,l.update_time,l.last_heartbeat_time,
qu.qw_user_name,qec.name as external_user_name,c.company_id,u.avatar as fsAvatar,u.nick_name as fsNickName,qec.create_time as qec_create_time,
u.is_vip isVip,l.reward_type,cu.dept_id, l.watch_type,qec.tag_ids,u.last_ip
from fs_course_watch_log l
left join fs_user_course_video v on v.video_id = l.video_id
left join fs_user_course uc on uc.course_id = l.course_id
left join fs_user u on u.user_id = l.user_id
left join company_user cu on cu.user_id = l.company_user_id
left join company c on c.company_id = l.company_id
LEFT JOIN qw_user qu on qu.id= l.qw_user_id
LEFT JOIN qw_external_contact qec on l.qw_external_contact_id = qec.id
and (l.user_id = 0 or l.user_id is null)
and l.user_id != 0 and l.user_id is not null
and l.send_type = #{maps.sendType}
and l.user_id = #{maps.userId}
and l.log_id = #{maps.logId}
and l.project = #{maps.project}
and l.qw_external_contact_id = #{maps.qwExternalContactId}
and l.qw_user_id = #{maps.qwUserId}
and l.course_id = #{maps.courseId}
and l.video_id = #{maps.videoId}
and l.log_type = #{maps.logType}
and l.company_id = #{maps.companyId}
and l.watch_type = #{maps.watchType}
and l.company_user_id = #{maps.companyUserId}
and cu.nick_name like concat('%', #{maps.companyUserName}, '%')
and u.nick_name like concat('%', #{maps.nickName}, '%')
and qec.name like concat('%', #{maps.externalUserName}, '%')
and DATE(qec.create_time) >= DATE(#{maps.qecSTime})
and DATE(qec.create_time) <= DATE(#{maps.qecETime})
and l.create_time >= #{maps.sTime}
and l.create_time <= #{maps.eTime}
and l.camp_period_time >= #{maps.scheduleStartTime}
and l.camp_period_time <= #{maps.scheduleEndTime}
and l.update_time >= #{maps.upSTime}
and l.update_time < date_add(#{maps.upETime}, interval 1 day)
and l.sop_id in
#{sopId}
and l.project = #{maps.project}
and l.sop_id = #{maps.sopId}
and qec.status = #{maps.externalStatus}
and l.period_id = #{maps.periodId}
and l.period_id in
#{periodId}
and qu.qw_user_name = #{maps.qwUserName}
and cu.dept_id = #{maps.deptId}
AND cu.dept_id IN
#{item}
AND cu.user_id IN
#{item}
order by l.finish_time desc,l.update_time desc,l.create_time desc
select qec.id,qec.user_id,qec.external_user_id,qec.corp_id,qec.tag_ids,qec.name
from fs_course_watch_log l
left join fs_user u on u.user_id = l.user_id
left join company_user cu on cu.user_id = l.company_user_id
LEFT JOIN qw_user qu on qu.id= l.qw_user_id
LEFT JOIN qw_external_contact qec on l.qw_external_contact_id = qec.id
and (l.user_id = 0 or l.user_id is null)
and l.user_id != 0 and l.user_id is not null
and l.send_type = #{maps.sendType}
and l.user_id = #{maps.userId}
and l.log_id = #{maps.logId}
and l.project = #{maps.project}
and l.qw_external_contact_id = #{maps.qwExternalContactId}
and l.qw_user_id = #{maps.qwUserId}
and l.course_id = #{maps.courseId}
and l.video_id = #{maps.videoId}
and l.log_type = #{maps.logType}
and l.company_id = #{maps.companyId}
and l.watch_type = #{maps.watchType}
and l.company_user_id = #{maps.companyUserId}
and cu.nick_name like concat('%', #{maps.companyUserName}, '%')
and u.nick_name like concat('%', #{maps.nickName}, '%')
and qec.name like concat('%', #{maps.externalUserName}, '%')
and DATE(qec.create_time) >= DATE(#{maps.qecSTime})
and DATE(qec.create_time) <= DATE(#{maps.qecETime})
and l.create_time >= #{maps.sTime}
and l.create_time <= #{maps.eTime}
and l.camp_period_time >= #{maps.scheduleStartTime}
and l.camp_period_time <= #{maps.scheduleEndTime}
and l.update_time >= #{maps.upSTime}
and l.update_time < date_add(#{maps.upETime}, interval 1 day)
and l.sop_id in
#{sopId}
and l.project = #{maps.project}
and l.sop_id = #{maps.sopId}
and qec.status = #{maps.externalStatus}
and l.period_id = #{maps.periodId}
and l.period_id in
#{periodId}
and qu.qw_user_name = #{maps.qwUserName}
and cu.dept_id = #{maps.deptId}
AND cu.dept_id IN
#{item}
AND cu.user_id IN
#{item}
GROUP BY
qec.user_id,
qec.external_user_id,
qec.corp_id
select l.log_id,l.user_id,uc.course_name,v.title as video_name,u.nick_name as fsNickName, u.avatar as fsAvatar,
l.log_type,SEC_TO_TIME(l.duration) as duration,c.company_name,l.camp_period_time,l.finish_time,
cu.nick_name as company_user_name ,l.send_type,l.create_time, qu.qw_user_name,qec.name as external_user_name
from fs_course_watch_log l
left join fs_user_course_video v on v.video_id = l.video_id
left join fs_user_course uc on uc.course_id = l.course_id
left join fs_user u on u.user_id = l.user_id
left join company_user cu on cu.user_id = l.company_user_id
left join company c on c.company_id = l.company_id
LEFT JOIN qw_user qu on qu.id= l.qw_user_id
LEFT JOIN qw_external_contact qec on l.qw_external_contact_id = qec.id
and l.user_id = #{userId}
and l.qw_user_id = #{qwUserId}
and l.course_id = #{courseId}
and l.video_id = #{videoId}
and l.log_type = #{logType}
and l.company_id = #{companyId}
and l.company_user_id = #{companyUserId}
and cu.nick_name like concat('%', #{companyUserName}, '%')
and u.nick_name like concat('%', #{nickName}, '%')
and DATE(l.create_time) >= DATE(#{sTime})
and DATE(l.create_time) <= DATE(#{eTime})
and DATE(l.camp_period_time) >= DATE(#{maps.scheduleStartTime})
and DATE(l.camp_period_time) <= DATE(#{maps.scheduleEndTime})
and l.sop_id in
#{sopId}
and l.watch_type = #{maps.watchType}
order by l.log_id desc
insert into fs_course_watch_log
user_id,
video_id,
log_type,
create_time,
update_time,
qw_external_contact_id,
duration,
qw_user_id,
company_user_id,
company_id,
course_id,
send_type,
reward_type,
sop_id,
finish_time,
send_finish_msg,
camp_period_time,
period_id,
project,
watch_type,
#{userId},
#{videoId},
#{logType},
#{createTime},
#{updateTime},
#{qwExternalContactId},
#{duration},
#{qwUserId},
#{companyUserId},
#{companyId},
#{courseId},
#{sendType},
#{rewardType},
#{sopId},
#{finishTime},
#{sendFinishMsg},
#{campPeriodTime},
#{periodId},
#{project},
#{watchType},
insert into fs_course_watch_log
user_id,
video_id,
log_type,
create_time,
update_time,
qw_external_contact_id,
duration,
qw_user_id,
company_user_id,
company_id,
course_id,
send_type,
reward_type,
sop_id,
finish_time,
send_finish_msg,
camp_period_time,
project,
watch_type,
#{userId},
#{videoId},
#{logType},
#{createTime},
#{updateTime},
#{qwExternalContactId},
#{duration},
#{qwUserId},
#{companyUserId},
#{companyId},
#{courseId},
#{sendType},
#{rewardType},
#{sopId},
#{finishTime},
#{sendFinishMsg},
#{campPeriodTime},
#{project},
#{watchType},
on duplicate key update
update_time = #{updateTime},
INSERT INTO fs_course_watch_log (
user_id,
video_id,
log_type,
create_time,
update_time,
qw_external_contact_id,
duration,
qw_user_id,
company_user_id,
company_id,
course_id,
send_type,
reward_type,
sop_id,
camp_period_time,
project,
period_id,
im_msg_send_detail_id,
watch_type,
link_id
)
VALUES
(
#{log.userId},
#{log.videoId},
#{log.logType},
#{log.createTime},
#{log.updateTime},
#{log.qwExternalContactId},
#{log.duration},
#{log.qwUserId},
#{log.companyUserId},
#{log.companyId},
#{log.courseId},
#{log.sendType},
#{log.rewardType},
#{log.sopId},
#{log.campPeriodTime},
#{log.project},
#{log.periodId},
#{log.imMsgSendDetailId},
#{log.watchType},
#{log.linkId}
)
ON DUPLICATE KEY UPDATE
update_time = NOW(),
im_msg_send_detail_id = VALUES(im_msg_send_detail_id),
link_id = VALUES(link_id)
update fs_course_watch_log
user_id = #{userId},
video_id = #{videoId},
log_type = #{logType},
create_time = #{createTime},
update_time = #{updateTime},
qw_external_contact_id = #{qwExternalContactId},
duration = #{duration},
qw_user_id = #{qwUserId},
company_user_id = #{companyUserId},
company_id = #{companyId},
course_id = #{courseId},
send_type = #{sendType},
reward_type = #{rewardType},
sop_id = #{sopId},
finish_time = #{finishTime},
send_finish_msg = #{sendFinishMsg},
last_heartbeat_time = #{lastHeartbeatTime},
period_id = #{periodId},
project = #{project},
watch_type = #{watchType},
where log_id = #{logId}
delete from fs_course_watch_log where log_id = #{logId}
delete from fs_course_watch_log where log_id in
#{logId}
SELECT
log_id,
user_id,
video_id,
log_type,
create_time,
update_time,
duration,
company_user_id,
company_id,
course_id,
send_type,
reward_type,
last_heartbeat_time,
sop_id,
finish_time,
send_finish_msg,
camp_period_time,
period_id
FROM
fs_course_watch_log
WHERE
send_type = 1
AND video_id = #{videoId}
AND user_id = #{fsUserId}
AND company_user_id = #{companyUserId} order by log_id desc limit 1
SELECT
log_id,
user_id,
video_id,
log_type,
create_time,
update_time,
duration,
company_user_id,
company_id,
course_id,
send_type,
reward_type,
last_heartbeat_time,
sop_id,
finish_time,
send_finish_msg,
camp_period_time,
period_id
FROM
fs_course_watch_log
WHERE
send_type = 1
AND video_id = #{videoId}
AND user_id = #{fsUserId}
AND company_user_id = #{companyUserId}
and period_id = #{periodId}
order by log_id desc limit 1
SELECT
o.company_user_id,o.user_id,DATE(o.create_time) create_time,
SUM(CASE WHEN o.log_type = '1' THEN 1 ELSE 0 END) AS type1,
SUM(CASE WHEN o.log_type = '2' THEN 1 ELSE 0 END) AS type2,
SUM(CASE WHEN o.log_type = '3' THEN 1 ELSE 0 END) AS type3,
SUM(CASE WHEN o.log_type = '4' THEN 1 ELSE 0 END) AS type4,
o.project as project,
o.course_id as course_id,
o.video_id as video_id
FROM fs_course_watch_log o
send_type=1
and o.company_id=#{companyId}
and DATE(o.create_time) >= #{sTime}
and DATE(o.create_time) <= #{eTime}
and o.course_id = #{courseId}
and o.video_id = #{videoId}
and o.company_user_id = #{companyUserId}
and o.project = #{project}
and o.user_id = #{userId}
GROUP BY o.video_id,o.user_id,DATE(o.create_time),o.project,o.course_id
ORDER BY o.video_id ,DATE(o.create_time)
SELECT COUNT(*)
FROM (
SELECT 1
FROM fs_course_watch_log o
send_type=2
and o.company_id=#{companyId}
and o.create_time >= #{startDate}
and o.create_time <= #{endDate}
and o.course_id = #{courseId}
and o.video_id = #{videoId}
and o.company_user_id = #{companyUserId}
and o.project = #{project}
and o.user_id = #{userId}
GROUP BY o.video_id, o.user_id, DATE(o.create_time), o.project, o.course_id
) AS grouped_results_count
select count(fcwl.log_id) from fs_course_watch_log fcwl
and fcwl.log_type in
#{logType}
and fcwl.company_user_id = #{params.companyUserId}
and date(fcwl.create_time) = #{params.date}
UPDATE fs_course_watch_log
SET
duration = CASE
WHEN video_id = #{item.videoId} AND qw_external_contact_id = #{item.qwExternalContactId} AND qw_user_id = #{item.qwUserId} THEN
CASE
WHEN #{item.duration} IS NOT NULL AND #{item.duration} > duration THEN #{item.duration}
ELSE duration
END
END,
last_heartbeat_time = CASE
WHEN video_id = #{item.videoId} AND qw_external_contact_id = #{item.qwExternalContactId} AND qw_user_id = #{item.qwUserId} THEN
CASE
WHEN #{item.lastHeartbeatTime} IS NOT NULL THEN #{item.lastHeartbeatTime}
ELSE last_heartbeat_time
END
END,
finish_time = CASE
WHEN video_id = #{item.videoId} AND qw_external_contact_id = #{item.qwExternalContactId} AND qw_user_id = #{item.qwUserId} THEN
CASE
WHEN finish_time IS NULL THEN #{item.finishTime}
ELSE finish_time
END
END,
log_type = CASE
WHEN video_id = #{item.videoId} AND qw_external_contact_id = #{item.qwExternalContactId} AND qw_user_id = #{item.qwUserId} THEN
CASE
WHEN log_type = 2 THEN log_type
WHEN #{item.logType} IS NOT NULL AND log_type != 2 THEN #{item.logType}
ELSE log_type
END
END
WHERE
(video_id, qw_external_contact_id, qw_user_id) IN
(#{item.videoId}, #{item.qwExternalContactId}, #{item.qwUserId})
UPDATE fs_course_watch_log
SET send_finish_msg = CASE
WHEN log_id = #{item.logId} THEN #{item.sendFinishMsg}
ELSE send_finish_msg
END
WHERE log_id IN
#{item.logId}
UPDATE fs_course_watch_log
SET
duration = CASE
WHEN video_id = #{item.videoId} AND user_id = #{item.userId} AND company_user_id = #{item.companyUserId} THEN
CASE
WHEN #{item.duration} IS NOT NULL AND #{item.duration} > duration THEN #{item.duration}
ELSE duration
END
END,
last_heartbeat_time = CASE
WHEN video_id = #{item.videoId} AND user_id = #{item.userId} AND company_user_id = #{item.companyUserId} THEN
CASE
WHEN #{item.lastHeartbeatTime} IS NOT NULL THEN #{item.lastHeartbeatTime}
ELSE last_heartbeat_time
END
END,
finish_time = CASE
WHEN video_id = #{item.videoId} AND user_id = #{item.userId} AND company_user_id = #{item.companyUserId} THEN
CASE
WHEN finish_time IS NULL THEN #{item.finishTime}
ELSE finish_time
END
END,
log_type = CASE
WHEN video_id = #{item.videoId} AND user_id = #{item.userId} AND company_user_id = #{item.companyUserId} THEN
CASE
WHEN log_type = 2 THEN log_type
WHEN #{item.logType} IS NOT NULL AND log_type != 2 THEN #{item.logType}
ELSE log_type
END
END
WHERE
(video_id, user_id, company_user_id) IN
(#{item.videoId}, #{item.userId}, #{item.companyUserId})
UPDATE fs_course_watch_log
SET
duration = CASE
WHEN video_id = #{item.videoId} AND user_id = #{item.userId} THEN
CASE
WHEN #{item.duration} IS NOT NULL AND #{item.duration} > duration THEN #{item.duration}
ELSE duration
END
END,
last_heartbeat_time = CASE
WHEN video_id = #{item.videoId} AND user_id = #{item.userId} THEN
CASE
WHEN #{item.lastHeartbeatTime} IS NOT NULL THEN #{item.lastHeartbeatTime}
ELSE last_heartbeat_time
END
END,
finish_time = CASE
WHEN video_id = #{item.videoId} AND user_id = #{item.userId} THEN
CASE
WHEN finish_time IS NULL THEN #{item.finishTime}
ELSE finish_time
END
END,
log_type = CASE
WHEN video_id = #{item.videoId} AND user_id = #{item.userId} THEN
CASE
WHEN log_type = 2 THEN log_type
WHEN #{item.logType} IS NOT NULL AND log_type != 2 THEN #{item.logType}
ELSE log_type
END
END
WHERE
(video_id, user_id) IN
(#{item.videoId}, #{item.userId})
select
uc.course_name,v.title as video_name,
watch.log_id,
watch.user_id,
watch.finish_time,
watch.send_finish_msg,
watch.sop_id,
watch.video_id,
watch.reward_type,
watch.log_type,
watch.create_time,
watch.update_time,
watch.qw_external_contact_id,
watch.duration,
watch.qw_user_id,
watch.company_user_id,
watch.company_id,
watch.course_id,
watch.camp_period_time,
company_user.nick_name as companyUserName
from
fs_user_course_training_camp camp
left join fs_user_course_period period on
camp.training_camp_id = period.training_camp_id
left join fs_course_watch_log watch on
period.period_id = watch.period_id
left join fs_user_course uc on uc.course_id = watch.course_id
left join fs_user_course_video v on v.video_id = watch.video_id
left join company_user on company_user.user_id = watch.company_user_id
`period`.del_flag = '0' and watch.log_type <> 3
and camp.training_camp_id = #{trainingCampId}
and watch.user_id = #{userId}
and `period`.period_id = #{periodId}
SELECT
l.log_id,
l.project AS project,
l.period_id,
l.user_id,
l.log_type,
SEC_TO_TIME(l.duration) AS duration,
l.camp_period_time,
l.finish_time,
l.send_type,
l.create_time,
l.update_time,
l.last_heartbeat_time,
l.company_id,
l.company_user_id,
l.course_id,
l.video_id,
l.qw_user_id,
l.qw_external_contact_id,
l.sop_id,
qec.create_time as qec_create_time,
u.last_ip
FROM
fs_course_watch_log l LEFT JOIN qw_external_contact qec on l.qw_external_contact_id = qec.id
left join fs_user u on u.user_id = l.user_id
left join company_user cu on cu.user_id = l.company_user_id
and l.send_type = #{maps.sendType}
and l.user_id = #{maps.userId}
and l.qw_external_contact_id = #{maps.qwExternalContactId}
and l.qw_user_id = #{maps.qwUserId}
and l.course_id = #{maps.courseId}
and l.video_id = #{maps.videoId}
and l.log_type = #{maps.logType}
and l.period_id = #{maps.periodId}
and l.company_id = #{maps.companyId}
and l.company_user_id = #{maps.companyUserId}
and cu.nick_name like concat('%', #{maps.companyUserName}, '%')
and u.nick_name like concat('%', #{maps.nickName}, '%')
and qec.name like concat('%', #{maps.externalUserName}, '%')
and DATE(qec.create_time) >= DATE(#{maps.qecSTime})
and DATE(qec.create_time) <= DATE(#{maps.qecETime})
and DATE(l.create_time) >= DATE(#{maps.sTime})
and DATE(l.create_time) <= DATE(#{maps.eTime})
and DATE(l.camp_period_time) >= DATE(#{maps.scheduleStartTime})
and DATE(l.camp_period_time) <= DATE(#{maps.scheduleEndTime})
and DATE(l.update_time) >= DATE(#{maps.upSTime})
and DATE(l.update_time) <= DATE(#{maps.upETime})
and l.sop_id in
#{sopId}
and l.period_id in
#{periodId}
order by l.finish_time desc,l.update_time desc,l.create_time desc
SELECT
*
FROM
fs_course_watch_log
WHERE
send_type = 1
AND video_id = #{videoId}
AND user_id in
#{userId}
ORDER BY
log_id DESC
select count(distinct cwl.user_id)
from fs_user_course_period ucp
inner join fs_course_watch_log cwl on ucp.period_id = cwl.period_id
where ucp.training_camp_id = #{trainingCampId}
SELECT
o.video_id,
o.company_id,
comp.company_name,
o.qw_user_id,
DATE(o.create_time) create_time,
v.title videoName,
uc.course_name,
SUM(CASE WHEN o.log_type = '1' THEN 1 ELSE 0 END) AS type1,
SUM(CASE WHEN o.log_type = '2' THEN 1 ELSE 0 END) AS type2,
SUM(CASE WHEN o.log_type = '3' THEN 1 ELSE 0 END) AS type3,
SUM(CASE WHEN o.log_type = '4' THEN 1 ELSE 0 END) AS type4
FROM
fs_course_watch_log o
LEFT JOIN fs_user_course_video v ON v.video_id = o.video_id
LEFT JOIN company comp ON comp.company_id = o.company_id
LEFT JOIN qw_user qu ON qu.id = o.qw_user_id
LEFT JOIN fs_user_course uc ON uc.course_id = v.course_id
and send_type = #{sendType}
and o.company_id = #{companyId}
AND DATE (o.create_time) >= DATE (#{sTime})
AND DATE (o.create_time) <= DATE (#{eTime})
and o.course_id = #{courseId}
and o.video_id = #{videoId}
GROUP BY
DATE (o.create_time),
o.company_id
ORDER BY
comp.company_id,
DATE (o.create_time)
SELECT
o.project,
o.course_id AS courseId,
uc.course_name AS courseName,
o.video_id AS videoId,
v.title AS videoName,
CASE WHEN o.log_type = 1 THEN 1 END AS type1,
CASE WHEN o.log_type = 2 THEN 1 END AS type2,
CASE WHEN o.log_type = 3 THEN 1 END AS type3,
CASE WHEN o.log_type = 4 THEN 1 END AS type4,
o.qw_user_id,
o.user_id AS userId,
o.company_user_id AS companyUserId,
o.company_id AS companyId,
o.create_time AS createTime
FROM
fs_course_watch_log o
LEFT JOIN fs_user_course_video v ON v.video_id = o.video_id
LEFT JOIN fs_user_course uc ON uc.course_id = v.course_id
WHERE
o.qw_external_contact_id=#{data.qwExternalContactId}
AND send_type = #{data.sendType}
AND DATE(o.create_time) >= DATE(#{data.startTime})
AND DATE(o.create_time) <= DATE(#{data.endTime})
order by o.create_time DESC
SELECT
o.company_id AS companyId,
c.company_name AS companyName,
o.send_type,
COUNT(DISTINCT o.user_id) AS watchUserCount,
COUNT(o.log_id) AS watchCount,
sum(case when o.log_type = 2 then 1 else 0 end) AS finishCount,
COUNT(DISTINCT CASE WHEN o.log_type = 2 THEN o.user_id END) AS finishUserCount
FROM
fs_course_watch_log o
LEFT JOIN company c ON c.company_id = o.company_id
WHERE
o.create_time >= #{params.startTime}
AND o.create_time <= #{params.endTime}
GROUP BY
o.company_id,
o.send_type
SELECT COUNT(*) FROM (
SELECT
o.video_id,
o.qw_user_id,
o.company_user_id,
o.qw_user_id,
DATE(o.create_time) create_time
FROM fs_course_watch_log o
LEFT JOIN qw_user qu ON qu.id = o.qw_user_id
LEFT JOIN fs_user_course_video v ON v.video_id = o.video_id
LEFT JOIN fs_user_course uc ON uc.course_id = v.course_id
LEFT JOIN company_user cu ON cu.user_id = o.company_user_id
WHERE 1=1
and o.company_id=#{companyId}
and o.company_user_id in
#{id}
AND send_type = #{sendType}
AND o.create_time >= STR_TO_DATE(#{sTime}, '%Y-%m-%d')
AND o.create_time >= #{sTime}
AND o.create_time < DATE_ADD(STR_TO_DATE(#{eTime}, '%Y-%m-%d'), INTERVAL 1 DAY)
AND o.create_time < DATE_ADD(#{eTime}, INTERVAL 1 DAY)
AND qu.qw_user_name LIKE CONCAT(#{nickName}, '%')
AND cu.nick_name LIKE CONCAT(#{nickName}, '%')
AND o.course_id = #{courseId}
AND o.video_id = #{videoId}
GROUP BY
o.video_id,
o.qw_user_id,
o.company_user_id,
o.qw_user_id,
DATE(o.create_time)
) AS t
SELECT
c.company_id AS companyId,
c.company_name AS companyName
FROM company c
c.is_del=0
AND c.company_id = #{companyId}
GROUP BY c.company_id, c.company_name
ORDER BY c.create_time DESC
SELECT
fwl.company_id AS companyId,
fwl.course_id As courseId,
fwl.video_id AS videoId,
COUNT(DISTINCT CASE WHEN fwl.log_type = 2 THEN fwl.user_id END ) AS finishedCount,
COUNT(CASE WHEN fwl.log_type = 2 THEN fwl.log_id END) AS courseCompleteTimes,
COUNT(DISTINCT CASE WHEN fwl.log_type != 3 THEN fwl.user_id END) AS accessCount,
ifnull(
ROUND(
(
COUNT( DISTINCT CASE WHEN fwl.log_type = 2 THEN fwl.user_id END ) / count( DISTINCT CASE WHEN fwl.log_type != 3
THEN fwl.user_id END )) * 100,
2
),
0
) AS finishRate
FROM
fs_course_watch_log fwl
fwl.send_type = 2
AND fwl.create_time >= #{startDate} AND fwl.create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
AND fwl.company_id = #{companyId}
AND fwl.video_id = #{videoId}
AND fwl.course_id = #{courseId}
GROUP BY fwl.course_id
GROUP BY fwl.video_id
GROUP BY fwl.company_id
ORDER BY accessCount desc
select c.img_url courseUrl,v.title courseName,c.title,l.log_id logId,u.qw_user_name qwUserName from fs_course_watch_log l
left join fs_user_course c on c.course_id = l.course_id
left join qw_user u on l.qw_user_id = u.id
left join fs_user_course_video v on l.video_id =v.video_id
where l.user_id = #{userId} AND l.create_time >= CURDATE()
AND l.create_time < CURDATE() + INTERVAL 1 DAY
order by l.create_time desc
select log_id logId from fs_course_watch_log where qw_external_contact_id = #{id}
and qw_user_id = #{qwUserId} and user_id is null
select c.img_url courseUrl,v.title courseName,c.title,l.log_id logId,u.qw_user_name qwUserName from fs_course_watch_log l
left join fs_user_course c on c.course_id = l.course_id
left join qw_user u on l.qw_user_id = u.id
left join fs_user_course_video v on l.video_id =v.video_id
where l.qw_external_contact_id = #{qwExternalId} AND l.create_time >= CURDATE()
AND l.create_time < CURDATE() + INTERVAL 1 DAY
order by l.create_time desc
SELECT
COUNT(DISTINCT l.user_id) AS firstWatchCount,
COUNT(DISTINCT CASE WHEN l.duration >= 1200 THEN l.user_id END) AS firstWatch20MinCount,
COUNT(DISTINCT CASE WHEN l.duration >= 1800 THEN l.user_id END) AS firstWatch30MinCount
FROM fs_course_watch_log l
INNER JOIN fs_user_course_period_days fcpd ON fcpd.period_id = l.period_id AND fcpd.video_id = l.video_id AND fcpd.del_flag = '0'
INNER JOIN fs_user_course_video v ON v.video_id = l.video_id AND v.is_del = 0
WHERE l.video_id = #{videoId}
AND l.period_id = #{periodId}
AND l.user_id IS NOT NULL
AND l.company_id = #{companyId}
AND l.company_user_id = #{companyUserId}
AND (
(COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration, 0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration, 0) SECOND), l.create_time) >= fcpd.start_date_time)
AND
(COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration, 0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration, 0) SECOND), l.create_time) < DATE_ADD(fcpd.start_date_time, INTERVAL COALESCE(v.duration, 0) SECOND))
)
SELECT
COUNT(DISTINCT l.user_id) AS repeatWatchCount,
COUNT(DISTINCT CASE WHEN l.duration >= 1200 THEN l.user_id END) AS repeatWatch20MinCount,
COUNT(DISTINCT CASE WHEN l.duration >= 1800 THEN l.user_id END) AS repeatWatch30MinCount
FROM fs_course_watch_log l
INNER JOIN fs_user_course_period_days fcpd ON fcpd.period_id = l.period_id AND fcpd.video_id = l.video_id AND fcpd.del_flag = '0'
INNER JOIN fs_user_course_video v ON v.video_id = l.video_id AND v.is_del = 0
WHERE l.video_id = #{videoId}
AND l.period_id = #{periodId}
AND l.user_id IS NOT NULL
AND (
(COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration, 0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration, 0) SECOND), l.create_time) < fcpd.start_date_time)
OR
(COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration, 0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration, 0) SECOND), l.create_time) >= DATE_ADD(fcpd.start_date_time, INTERVAL COALESCE(v.duration, 0) SECOND))
)
SELECT
ua.user_id AS userId,
COALESCE(u.nick_name, u.nickname, '未知用户') AS userName,
COALESCE(ua.first_dur, 0) AS watchDuration,
COALESCE(ua.repeat_dur, 0) AS repeatWatchDuration,
COALESCE(ord.order_count, 0) AS orderCount,
COALESCE(ord.order_amount, 0) AS orderAmount,
c.company_name AS companyName,
cu.nick_name AS salesName
, ans.course_rating AS courseRating
FROM (
SELECT
l.user_id,
MAX(l.create_time) AS max_create_time,
SUM(CASE WHEN
(COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration,0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration,0) SECOND), l.create_time) >= fcpd.start_date_time)
AND (COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration,0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration,0) SECOND), l.create_time) < DATE_ADD(fcpd.start_date_time, INTERVAL COALESCE(v.duration,0) SECOND))
THEN COALESCE(l.duration,0) ELSE 0 END) AS first_dur,
SUM(CASE WHEN
(COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration,0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration,0) SECOND), l.create_time) < fcpd.start_date_time)
OR (COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration,0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration,0) SECOND), l.create_time) >= DATE_ADD(fcpd.start_date_time, INTERVAL COALESCE(v.duration,0) SECOND))
THEN COALESCE(l.duration,0) ELSE 0 END) AS repeat_dur,
MAX(l.company_id) AS company_id,
MAX(l.company_user_id) AS company_user_id
FROM fs_course_watch_log l
INNER JOIN fs_user_course_period_days fcpd ON fcpd.period_id = l.period_id AND fcpd.video_id = l.video_id AND fcpd.del_flag = '0'
INNER JOIN fs_user_course_video v ON v.video_id = l.video_id AND v.is_del = 0
WHERE l.video_id = #{param.videoId} AND l.period_id = #{param.periodId} AND l.user_id IS NOT NULL
AND l.company_id = #{param.companyId}
AND l.company_user_id = #{param.companyUserId}
GROUP BY l.user_id
) ua
LEFT JOIN fs_user u ON u.user_id = ua.user_id
LEFT JOIN (
SELECT
o.user_id,
COUNT(o.id) AS order_count,
SUM(IFNULL(o.pay_price, 0)) AS order_amount,
MIN(o.id) AS min_order_id
FROM fs_store_order_scrm o
WHERE o.order_type = 3 AND o.video_id = #{param.videoId} AND o.period_id = #{param.periodId} AND o.paid = 1
AND o.company_id = #{param.companyId}
GROUP BY o.user_id
) ord ON ord.user_id = ua.user_id
LEFT JOIN company c ON c.company_id = ua.company_id
LEFT JOIN company_user cu ON cu.user_id = ua.company_user_id
LEFT JOIN (
SELECT a.user_id, a.question_json AS course_rating
FROM fs_course_answer_logs a
INNER JOIN (
SELECT user_id, MAX(log_id) AS max_log_id
FROM fs_course_answer_logs
WHERE video_id = #{param.videoId} AND period_id = #{param.periodId}
GROUP BY user_id
) latest ON latest.user_id = a.user_id AND latest.max_log_id = a.log_id
) ans ON ans.user_id = ua.user_id
ORDER BY ua.max_create_time DESC
SELECT
ua.user_id AS userId,
COALESCE(u.nick_name, u.nickname, '未知用户') AS userName,
COALESCE(ua.first_dur, 0) AS watchDuration,
COALESCE(ua.repeat_dur, 0) AS repeatWatchDuration,
COALESCE(ord.order_count, 0) AS orderCount,
COALESCE(ord.order_amount, 0) AS orderAmount,
c.company_name AS companyName,
cu.nick_name AS salesName
, ans.course_rating AS courseRating
FROM (
SELECT
l.user_id,
MAX(l.create_time) AS max_create_time,
SUM(CASE WHEN
(COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration,0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration,0) SECOND), l.create_time) >= fcpd.start_date_time)
AND (COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration,0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration,0) SECOND), l.create_time) < DATE_ADD(fcpd.start_date_time, INTERVAL COALESCE(v.duration,0) SECOND))
THEN COALESCE(l.duration,0) ELSE 0 END) AS first_dur,
SUM(CASE WHEN
(COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration,0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration,0) SECOND), l.create_time) < fcpd.start_date_time)
OR (COALESCE(DATE_SUB(l.finish_time, INTERVAL COALESCE(l.duration,0) SECOND), DATE_SUB(l.update_time, INTERVAL COALESCE(l.duration,0) SECOND), l.create_time) >= DATE_ADD(fcpd.start_date_time, INTERVAL COALESCE(v.duration,0) SECOND))
THEN COALESCE(l.duration,0) ELSE 0 END) AS repeat_dur,
MAX(l.company_id) AS company_id,
MAX(l.company_user_id) AS company_user_id
FROM fs_course_watch_log l
INNER JOIN fs_user_course_period_days fcpd ON fcpd.period_id = l.period_id AND fcpd.video_id = l.video_id AND fcpd.del_flag = '0'
INNER JOIN fs_user_course_video v ON v.video_id = l.video_id AND v.is_del = 0
WHERE l.video_id = #{param.videoId} AND l.period_id = #{param.periodId} AND l.user_id IS NOT NULL
AND l.company_id = #{param.companyId}
AND l.company_user_id = #{param.companyUserId}
GROUP BY l.user_id
) ua
LEFT JOIN fs_user u ON u.user_id = ua.user_id
LEFT JOIN (
SELECT
o.user_id,
COUNT(o.id) AS order_count,
SUM(IFNULL(o.pay_price, 0)) AS order_amount,
MIN(o.id) AS min_order_id
FROM fs_store_order_scrm o
WHERE o.order_type = 3 AND o.video_id = #{param.videoId} AND o.period_id = #{param.periodId} AND o.paid = 1
AND o.company_id = #{param.companyId}
GROUP BY o.user_id
) ord ON ord.user_id = ua.user_id
LEFT JOIN company c ON c.company_id = ua.company_id
LEFT JOIN company_user cu ON cu.user_id = ua.company_user_id
LEFT JOIN (
SELECT a.user_id, a.question_json AS course_rating
FROM fs_course_answer_logs a
INNER JOIN (
SELECT user_id, MAX(log_id) AS max_log_id
FROM fs_course_answer_logs
WHERE video_id = #{param.videoId} AND period_id = #{param.periodId}
GROUP BY user_id
) latest ON latest.user_id = a.user_id AND latest.max_log_id = a.log_id
) ans ON ans.user_id = ua.user_id
ORDER BY ua.max_create_time DESC
LIMIT 50000
SELECT
COALESCE(agg.total_students, 0) AS totalStudents,
COALESCE(agg.completed_count, 0) AS completedCount,
CASE
WHEN COALESCE(agg.total_students, 0) > 0 THEN
ROUND((agg.completed_count * 100.0 / agg.total_students), 2)
ELSE 0
END AS actualCompletionRate,
CASE
WHEN COALESCE(agg.total_students, 0) > 0 THEN
ROUND((agg.total_viewing_seconds / agg.total_students) , 2)
ELSE 0
END AS avgWatchDurationMinutes,
CASE
WHEN COALESCE(agg.completed_count, 0) > 0 THEN
ROUND((agg.total_duration_completers_seconds / agg.completed_count) , 2)
ELSE 0
END AS avgCompletedDuration,
CASE
WHEN COALESCE(agg.completed_count, 0) > 0
AND COALESCE(vid.video_duration_sec, 0) > 0 THEN
ROUND(((agg.total_duration_completers_seconds / agg.completed_count) / vid.video_duration_sec) * 100, 2)
ELSE 0
END AS avgCompletionPlaybackRate
FROM (
SELECT
COUNT(*) AS total_students,
COALESCE(SUM(CASE WHEN u.has_complete_log = 1 THEN 1 ELSE 0 END), 0) AS completed_count,
COALESCE(SUM(u.sum_pos_duration_sec), 0) AS total_viewing_seconds,
COALESCE(SUM(CASE WHEN u.has_complete_log = 1 THEN u.sum_pos_duration_sec ELSE 0 END), 0) AS total_duration_completers_seconds
FROM (
SELECT
wl.user_id,
SUM(CASE WHEN COALESCE(wl.duration, 0) > 0 THEN COALESCE(wl.duration, 0) ELSE 0 END) AS sum_pos_duration_sec,
MAX(CASE WHEN wl.log_type = 2 AND COALESCE(wl.duration, 0) > 0 THEN 1 ELSE 0 END) AS has_complete_log
FROM fs_course_watch_log wl
WHERE wl.video_id = #{videoId}
AND wl.period_id = #{periodId}
AND wl.user_id IS NOT NULL
AND wl.company_id = #{companyId}
AND wl.company_user_id = #{companyUserId}
GROUP BY wl.user_id
HAVING SUM(CASE WHEN COALESCE(wl.duration, 0) > 0 THEN COALESCE(wl.duration, 0) ELSE 0 END) > 0
) u
) agg
CROSS JOIN (
SELECT COALESCE(MAX(v.duration), 0) AS video_duration_sec
FROM fs_user_course_video v
WHERE v.video_id = #{videoId} AND v.is_del = 0
) vid
SELECT l.company_user_id,l.course_id,l.video_id,
cu.nick_name as salesName,fuc.course_name as courseName,fuv.title as videoTitle,
SUM(CASE WHEN l.log_type = 2 THEN 1 ELSE 0 END) AS finishedCount,
SUM(CASE WHEN l.log_type = 3 THEN 1 ELSE 0 END) AS notWatchedCount,
SUM(CASE WHEN l.log_type = 4 THEN 1 ELSE 0 END) AS interruptCount,
SUM(CASE WHEN l.log_type = 1 THEN 1 ELSE 0 END) AS watchingCount
from fs_course_watch_log l
left join company_user cu on l.company_user_id=cu.user_id
left join fs_user_course fuc on l.course_id=fuc.course_id
left join fs_user_course_video fuv on l.video_id=fuv.video_id
where send_type = 1 and watch_type =1
and l.company_id = #{companyId}
and l.company_user_id = #{companyUserId}
and l.course_id = #{courseId}
and l.video_id = #{videoId}
and l.create_time >= #{startDate} and l.create_time <= #{endDate}
group by l.company_user_id,l.course_id,l.video_id
SELECT
log.user_id userId,
u.nick_name AS nickName,
u.source loginChannel,
cu.nick_name AS salesName,
c.company_name AS salesCompany,
cd.dept_name AS salesDept,
log.period_id periodId,
log.video_id videoId,
log.log_id logId,
log.create_time courseTime,
log.finish_time finishTime,
log.duration privateWatchDuration,
log.log_type privateWatchStatus,
cv.title AS videoTitle
FROM
fs_course_watch_log log
LEFT JOIN fs_user u ON u.user_id = log.user_id
LEFT JOIN fs_user_company_user cuu ON cuu.user_id = u.user_id
LEFT JOIN company_user cu ON cuu.company_user_id = cu.user_id
LEFT JOIN company c ON log.company_id = c.company_id
LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
LEFT JOIN fs_user_course_video cv ON log.video_id = cv.video_id
WHERE log.send_type = 1
AND log.watch_type = 1
group by log.user_id
ORDER BY u.register_date DESC
SELECT
cp.period_id periodId,
cp.period_name periodName,
camp.training_camp_name
FROM
fs_user_course_period cp
LEFT JOIN fs_user_course_training_camp camp ON camp.training_camp_id = cp.training_camp_id
WHERE cp.period_id in
#{periodId}
SELECT
rp.watch_log_id as logId,
SUM(rp.amount) AS redPacketAmount
FROM fs_course_red_packet_log rp
WHERE rp.watch_log_id IN
#{logId}
GROUP BY rp.watch_log_id
SELECT
l.watch_log_id AS logId,
CASE WHEN l.log_id IS NOT NULL THEN '已答题' ELSE '未答题' END AS answerStatus,
(
SELECT COUNT(1)
FROM fs_course_watch_log wl
WHERE wl.log_id IN
#{logId}
AND wl.log_id NOT IN (
SELECT watch_log_id
FROM fs_course_answer_logs
WHERE watch_log_id IS NOT NULL
)) AS notAnsweredCount
FROM fs_course_answer_logs l
WHERE l.watch_log_id IN
#{logId}
GROUP BY l.watch_log_id
select c.course_name courseName,c.img_url imgUrl,r.title videoName,l.link_id linkId,l.duration,l.video_id videoId,l.user_id userId,l.company_user_id companyUserId,l.log_id logId from fs_course_watch_log l
left join fs_user_course c on l.course_id =c.course_id
left join fs_user_course_video r on r.video_id=l.video_id
WHERE l.user_id = #{userId} and l.log_type = 2
and l.create_time >= CONCAT(CURDATE(), ' 00:00:00')
and l.create_time <= CONCAT(CURDATE(), ' 23:59:59')
select c.course_name courseName,c.img_url imgUrl,r.title videoName,l.link_id linkId,l.duration,l.video_id videoId,l.user_id userId,l.company_user_id companyUserId,l.log_id logId from fs_course_watch_log l
left join fs_user_course c on l.course_id =c.course_id
left join fs_user_course_video r on r.video_id=l.video_id
WHERE l.user_id = #{userId} and l.log_type != 2
and l.create_time >= CONCAT(CURDATE(), ' 00:00:00')
and l.create_time <= CONCAT(CURDATE(), ' 23:59:59')
select c.course_name courseName,c.img_url imgUrl,r.title videoName,l.link_id linkId,l.duration,l.video_id videoId,l.user_id userId,l.company_user_id companyUserId,l.log_id logId
from fs_course_watch_log l
left join fs_user_course c on l.course_id =c.course_id
left join fs_user_course_video r on r.video_id=l.video_id
WHERE l.user_id = #{userId} and l.update_time is not null
order by l.update_time DESC LIMIT 1
SELECT
cp.period_id periodId,
cp.period_name periodName,
camp.training_camp_name trainingCampName
FROM
fs_user_course_period cp
LEFT JOIN fs_user_course_training_camp camp ON camp.training_camp_id = cp.training_camp_id
WHERE cp.period_id in
#{periodId}
SELECT
cd.dept_id AS deptId,
COUNT(DISTINCT CASE WHEN u.source IS NOT NULL THEN u.user_id END) AS appUserCount,
COUNT(DISTINCT CASE WHEN u.source IS NOT NULL AND u.register_date >= #{startDate} AND u.register_date < DATE_ADD(#{endDate}, INTERVAL 1 DAY) THEN u.user_id END)
COUNT(DISTINCT CASE WHEN u.source IS NOT NULL THEN u.user_id END)
AS newAppUserCount,
COUNT(DISTINCT cu.user_id) AS salesCount
FROM fs_user u
LEFT JOIN fs_user_company_user cuu ON cuu.user_id = u.user_id
LEFT JOIN company_user cu ON cuu.company_user_id = cu.user_id
LEFT JOIN company c ON cuu.company_id = c.company_id
LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
WHERE u.source IS NOT NULL
AND cuu.company_id = #{companyId}
AND cu.dept_id = #{deptId}
AND cu.user_id = #{salesId}
AND cuu.project_id = #{project}
GROUP BY cd.dept_id
SELECT
cd.dept_id AS deptId,
cd.dept_name AS salesDept,
c.company_name AS salesCompany,
log.period_id AS periodId,
log.video_id AS videoId,
cv.title AS videoTitle,
c.company_id AS companyId,
COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.log_id END) AS finishedCount,
COUNT(DISTINCT CASE WHEN log.log_type = '1' THEN log.log_id END) AS unfinishedCount,
COUNT(DISTINCT CASE WHEN log.log_type = '3' THEN log.log_id END) AS notWatchedCount,
COUNT(DISTINCT CASE WHEN a.log_id IS NULL THEN log.log_id END) AS notAnsweredCount,
COALESCE(SUM(rpl.amount), 0) AS redPacketAmount
FROM fs_course_watch_log log
LEFT JOIN company_user cu ON log.company_user_id = cu.user_id
LEFT JOIN company c ON log.company_id = c.company_id
LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
LEFT JOIN fs_user_course_video cv ON log.video_id = cv.video_id
LEFT JOIN fs_course_answer_logs a ON a.watch_log_id = log.log_id
LEFT JOIN fs_course_red_packet_log rpl ON rpl.watch_log_id = log.log_id
WHERE log.send_type = 1
AND log.watch_type = 1
GROUP BY cd.dept_id, log.period_id, log.video_id
ORDER BY cd.dept_id
SELECT
cd.dept_id AS deptId,
log.period_id AS periodId,
log.video_id AS videoId,
COUNT(DISTINCT CASE WHEN po.status = 3 THEN po.order_id END) AS historyOrderCount
FROM fs_course_watch_log log
LEFT JOIN company_user cu ON log.company_user_id = cu.user_id
LEFT JOIN company c ON log.company_id = c.company_id
LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
LEFT JOIN fs_package_order po ON po.user_id = log.user_id
WHERE log.send_type = 1
AND log.watch_type = 1
GROUP BY cd.dept_id, log.period_id, log.video_id
SELECT
cu.user_id AS salesId,
COUNT(DISTINCT CASE WHEN u.source IS NOT NULL THEN u.user_id END) AS appUserCount,
COUNT(DISTINCT CASE WHEN u.source IS NOT NULL AND u.register_date >= #{startDate} AND u.register_date < DATE_ADD(#{endDate}, INTERVAL 1 DAY) THEN u.user_id END)
COUNT(DISTINCT CASE WHEN u.source IS NOT NULL THEN u.user_id END)
AS newAppUserCount
FROM fs_user u
LEFT JOIN fs_user_company_user cuu ON cuu.user_id = u.user_id
LEFT JOIN company_user cu ON cuu.company_user_id = cu.user_id
LEFT JOIN company c ON cuu.company_id = c.company_id
LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
WHERE u.source IS NOT NULL
AND cuu.company_id = #{companyId}
AND cu.dept_id = #{deptId}
AND cu.user_id = #{salesId}
AND cuu.project_id = #{project}
GROUP BY cu.user_id
SELECT
cu.user_id AS salesId,
cu.nick_name AS salesName,
cd.dept_name AS salesDept,
c.company_name AS salesCompany,
log.period_id AS periodId,
log.video_id AS videoId,
cv.title AS videoTitle,
cd.dept_id AS deptId,
c.company_id AS companyId,
COUNT(DISTINCT CASE WHEN log.log_type = '2' THEN log.log_id END) AS finishedCount,
COUNT(DISTINCT CASE WHEN log.log_type = '1' THEN log.log_id END) AS unfinishedCount,
COUNT(DISTINCT CASE WHEN log.log_type = '3' THEN log.log_id END) AS notWatchedCount,
COUNT(DISTINCT CASE WHEN a.log_id IS NULL THEN log.log_id END) AS notAnsweredCount,
COALESCE(SUM(rpl.amount), 0) AS redPacketAmount
FROM fs_course_watch_log log
LEFT JOIN company_user cu ON log.company_user_id = cu.user_id
LEFT JOIN company c ON log.company_id = c.company_id
LEFT JOIN company_dept cd ON cu.dept_id = cd.dept_id
LEFT JOIN fs_user_course_video cv ON log.video_id = cv.video_id
LEFT JOIN fs_course_answer_logs a ON a.watch_log_id = log.log_id
LEFT JOIN fs_course_red_packet_log rpl ON rpl.watch_log_id = log.log_id
WHERE log.send_type = 1
AND log.watch_type = 1
GROUP BY cu.user_id, log.period_id, log.video_id
ORDER BY cu.user_id
AND c.company_id = #{companyId}
AND cd.dept_id = #{deptId}
AND cu.user_id = #{salesId}
AND log.project = #{project}
AND log.create_time >= #{startDate} AND log.create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
AND log.period_id IN (SELECT period_id FROM fs_user_course_period WHERE training_camp_id = #{trainingCampId})
AND log.period_id = #{periodId}
AND u.user_id = #{userId}
AND u.phone LIKE CONCAT('%', #{userPhone}, '%')
AND u.nick_name LIKE CONCAT('%', #{nickName}, '%')