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
)
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}
)
ON DUPLICATE KEY UPDATE
update_time = NOW(),
im_msg_send_detail_id = VALUES(im_msg_send_detail_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
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 (
(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
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
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
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
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
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
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
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
ORDER BY ua.max_create_time DESC
LIMIT 50000
SELECT
a.totalStudents,
a.completedCount,
ROUND((a.completedCount / a.totalStudents) * 100, 2) AS actualCompletionRate,
ROUND((a.totalViewingDuration / a.totalStudents) / 60, 2) AS avgWatchDurationMinutes,
ROUND((a.totalDurationOfCompleters/a.completedCount)/60,2) AS avgCompletedDuration,
ROUND(((a.totalDurationOfCompleters/a.completedCount)/a.duration) * 100,2) AS avgCompletionPlaybackRate
FROM
(
SELECT
COUNT(*) AS totalStudents,
SUM(CASE WHEN wl.log_type = 2 THEN 1 ELSE 0 END) AS completedCount,
SUM(wl.duration) AS totalViewingDuration,
SUM(CASE WHEN wl.log_type = 2 THEN wl.duration ELSE 0 END) AS totalDurationOfCompleters,
cv.duration
FROM
fs_user_course_period_days pd
INNER JOIN fs_course_watch_log wl ON pd.period_id = wl.period_id
INNER JOIN fs_user_course_video cv ON pd.video_id = cv.video_id
AND pd.video_id = wl.video_id
WHERE
pd.period_id = #{periodId}
AND pd.video_id = #{videoId}
GROUP BY
pd.period_id
) a