手表日汇总数据bug修复
This commit is contained in:
+63
-56
@@ -334,68 +334,75 @@
|
|||||||
AND wsd.data_date = temp.latest_date;
|
AND wsd.data_date = temp.latest_date;
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
|
||||||
<insert id="insertStat">
|
<insert id="insertStat">
|
||||||
insert into watch_stat_user_info_day_heart_rate(id, user_id, max_value, min_value, avg_value, silence_max_value,
|
INSERT INTO watch_stat_user_info_day_heart_rate ( id, user_id, max_value, min_value, avg_value, silence_max_value, silence_min_value, silence_avg_value, last_upload_time, new_value, silence_new_value, data_date, org_code ) (
|
||||||
silence_min_value, silence_avg_value, last_upload_time, new_value, silence_new_value, data_date, org_code)
|
SELECT
|
||||||
(select #{id,jdbcType=VARCHAR},
|
#{id,jdbcType=VARCHAR},
|
||||||
bind_user_id,
|
bind_user_id,
|
||||||
ifnull(max(data_value), 0),
|
IFNULL( MAX( wd.data_value ), 0 ),
|
||||||
ifnull(min(data_value), 0),
|
IFNULL( MIN( wd.data_value ), 0 ),
|
||||||
ifnull(avg(data_value), 0),
|
IFNULL( AVG( wd.data_value ), 0 ),
|
||||||
ifnull(max(silence_value), 0),
|
IFNULL( MAX( wd.silence_value ), 0 ),
|
||||||
ifnull(min(silence_value), 0),
|
IFNULL( MIN( wd.silence_value ), 0 ),
|
||||||
ifnull(avg(silence_value), 0),
|
IFNULL( AVG( wd.silence_value ), 0 ),
|
||||||
ifnull(max(time_stamp), NOW()),
|
IFNULL(MAX( wd.time_stamp ),NOW()),
|
||||||
ifnull(data_value, 0),
|
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ),
|
||||||
ifnull(silence_value, 0),
|
MAX( CASE WHEN wd.rn = 1 THEN wd.silence_value END ),
|
||||||
data_date,
|
data_date,
|
||||||
#{orgCode,jdbcType=VARCHAR}
|
#{orgCode,jdbcType=VARCHAR}
|
||||||
from watch_data_heart_rate
|
FROM
|
||||||
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
(
|
||||||
and data_date = #{dataDate,jdbcType=DATE}
|
SELECT
|
||||||
group by bind_user_id, data_date);
|
*,
|
||||||
|
ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
|
||||||
|
FROM
|
||||||
|
watch_data_heart_rate
|
||||||
|
WHERE
|
||||||
|
bind_user_id = #{userId,jdbcType=VARCHAR}
|
||||||
|
and data_date = #{dataDate,jdbcType=DATE}
|
||||||
|
) wd
|
||||||
|
GROUP BY
|
||||||
|
wd.bind_user_id,
|
||||||
|
wd.data_date
|
||||||
|
);
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
|
||||||
<update id="updateStat">
|
<update id="updateStat">
|
||||||
update watch_stat_user_info_day_heart_rate stat
|
UPDATE watch_stat_user_info_day_heart_rate stat
|
||||||
left join (
|
LEFT JOIN (
|
||||||
select
|
SELECT
|
||||||
|
wd.bind_user_id,
|
||||||
|
wd.data_date,
|
||||||
|
IFNULL( MAX( wd.data_value ), 0 ) AS max_value,
|
||||||
|
IFNULL( MIN( wd.data_value ), 0 ) AS min_value,
|
||||||
|
IFNULL( AVG( wd.data_value ), 0 ) AS avg_value,
|
||||||
|
IFNULL( MAX( wd.silence_value ), 0 ) AS silence_max_value,
|
||||||
|
IFNULL( MIN( wd.silence_value ), 0 ) AS silence_min_value,
|
||||||
|
IFNULL( AVG( wd.silence_value ), 0 ) AS silence_avg_value,
|
||||||
|
IFNULL(MAX( wd.time_stamp ),NOW()) AS last_upload_time,
|
||||||
|
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ) AS new_value,
|
||||||
|
MAX( CASE WHEN wd.rn = 1 THEN wd.silence_value END ) AS silence_new_value
|
||||||
|
FROM
|
||||||
|
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn FROM watch_data_heart_rate where bind_user_id = #{userId,jdbcType=VARCHAR}
|
||||||
|
and data_date = #{dataDate,jdbcType=DATE} ) wd
|
||||||
|
GROUP BY
|
||||||
wd.bind_user_id,
|
wd.bind_user_id,
|
||||||
ifnull(max(wd.data_value), 0) as max_value,
|
|
||||||
ifnull(min(wd.data_value), 0) as min_value,
|
|
||||||
ifnull(avg(wd.data_value), 0) as avg_value,
|
|
||||||
ifnull(max(wd.silence_value), 0) as silence_max_value,
|
|
||||||
ifnull(min(wd.silence_value), 0) as silence_min_value,
|
|
||||||
ifnull(avg(wd.silence_value), 0) as silence_avg_value,
|
|
||||||
ifnull(max(wd.time_stamp), NOW()) as last_upload_time,
|
|
||||||
latest.new_value,
|
|
||||||
latest.silence_new_value,
|
|
||||||
wd.data_date
|
wd.data_date
|
||||||
from watch_data_heart_rate wd
|
) DATA ON stat.user_id = DATA.bind_user_id
|
||||||
left join (
|
AND stat.data_date = DATA.data_date
|
||||||
select bind_user_id, data_date, data_value as new_value, silence_value as silence_new_value
|
SET stat.max_value = DATA.max_value,
|
||||||
from watch_data_heart_rate t1
|
stat.min_value = DATA.min_value,
|
||||||
where (bind_user_id, data_date, time_stamp) in (
|
stat.avg_value = DATA.avg_value,
|
||||||
select bind_user_id, data_date, max(time_stamp)
|
stat.silence_max_value = DATA.silence_max_value,
|
||||||
from watch_data_heart_rate
|
stat.silence_min_value = DATA.silence_min_value,
|
||||||
group by bind_user_id, data_date
|
stat.silence_avg_value = DATA.silence_avg_value,
|
||||||
)
|
stat.last_upload_time = DATA.last_upload_time,
|
||||||
) latest on wd.bind_user_id = latest.bind_user_id and wd.data_date = latest.data_date
|
stat.new_value = DATA.new_value,
|
||||||
where wd.bind_user_id = #{userId,jdbcType=VARCHAR}
|
stat.silence_new_value = COALESCE ( NULLIF( DATA.silence_new_value, 0 ), stat.silence_new_value ),
|
||||||
and wd.data_date = #{dataDate,jdbcType=DATE}
|
stat.org_code = #{orgCode,jdbcType=VARCHAR}
|
||||||
group by wd.bind_user_id, wd.data_date, latest.new_value, latest.silence_new_value
|
|
||||||
) data on stat.user_id = data.bind_user_id and stat.data_date = data.data_date
|
|
||||||
set stat.max_value = data.max_value,
|
|
||||||
stat.min_value = data.min_value,
|
|
||||||
stat.avg_value = data.avg_value,
|
|
||||||
stat.silence_max_value = data.silence_max_value,
|
|
||||||
stat.silence_min_value = data.silence_min_value,
|
|
||||||
stat.silence_avg_value = data.silence_avg_value,
|
|
||||||
stat.last_upload_time = data.last_upload_time,
|
|
||||||
stat.new_value = data.new_value,
|
|
||||||
stat.silence_new_value = IF(data.silence_new_value IS NULL OR data.silence_new_value = 0, stat.silence_new_value, data.silence_new_value),
|
|
||||||
stat.org_code = #{orgCode,jdbcType=VARCHAR}
|
|
||||||
where stat.user_id = #{userId,jdbcType=VARCHAR}
|
where stat.user_id = #{userId,jdbcType=VARCHAR}
|
||||||
and stat.data_date = #{dataDate,jdbcType=DATE};
|
and stat.data_date = #{dataDate,jdbcType=DATE};
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
+41
-42
@@ -36,54 +36,53 @@
|
|||||||
group by user_id
|
group by user_id
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
|
||||||
<insert id="insertStat">
|
<insert id="insertStat">
|
||||||
insert into watch_stat_user_info_day_spo2(id, user_id, max_value, min_value, avg_value, last_upload_time, new_value, data_date, org_code)
|
insert into watch_stat_user_info_day_spo2(id, user_id, max_value, min_value, avg_value, last_upload_time,
|
||||||
(select #{id,jdbcType=VARCHAR},
|
new_value, data_date, org_code)
|
||||||
bind_user_id,
|
(SELECT #{id,jdbcType=VARCHAR},
|
||||||
ifnull(max(data_value), 0),
|
bind_user_id,
|
||||||
ifnull(min(data_value), 0),
|
IFNULL(MAX(wd.data_value), 0),
|
||||||
ifnull(avg(data_value), 0),
|
IFNULL(MIN(wd.data_value), 0),
|
||||||
ifnull(max(time_stamp), NOW()),
|
IFNULL(AVG(wd.data_value), 0),
|
||||||
ifnull(data_value, 0),
|
IFNULL(MAX(wd.time_stamp), 0),
|
||||||
data_date,
|
MAX(CASE WHEN wd.rn = 1 THEN wd.data_value END),
|
||||||
#{orgCode,jdbcType=VARCHAR}
|
data_date,
|
||||||
from watch_data_spo2
|
#{orgCode,jdbcType=VARCHAR}
|
||||||
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
|
||||||
and data_date = #{dataDate,jdbcType=DATE}
|
FROM watch_data_spo2
|
||||||
group by bind_user_id, data_date);
|
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
||||||
|
and data_date = #{dataDate,jdbcType=DATE}) wd
|
||||||
|
GROUP BY wd.bind_user_id,
|
||||||
|
wd.data_date);
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
|
||||||
<update id="updateStat">
|
<update id="updateStat">
|
||||||
update watch_stat_user_info_day_spo2 stat
|
UPDATE watch_stat_user_info_day_spo2 stat
|
||||||
left join (
|
LEFT JOIN (
|
||||||
select
|
SELECT
|
||||||
|
wd.bind_user_id,
|
||||||
|
wd.data_date,
|
||||||
|
IFNULL( MAX( wd.data_value ), 0 ) AS max_value,
|
||||||
|
IFNULL( MIN( wd.data_value ), 0 ) AS min_value,
|
||||||
|
IFNULL( AVG( wd.data_value ), 0 ) AS avg_value,
|
||||||
|
IFNULL( MAX( wd.time_stamp ), 0 ) AS last_upload_time,
|
||||||
|
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ) AS new_value
|
||||||
|
FROM
|
||||||
|
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn FROM watch_data_spo2 where bind_user_id = #{userId,jdbcType=VARCHAR}
|
||||||
|
and data_date = #{dataDate,jdbcType=DATE}) wd
|
||||||
|
GROUP BY
|
||||||
wd.bind_user_id,
|
wd.bind_user_id,
|
||||||
ifnull(max(wd.data_value), 0) as max_value,
|
|
||||||
ifnull(min(wd.data_value), 0) as min_value,
|
|
||||||
ifnull(avg(wd.data_value), 0) as avg_value,
|
|
||||||
ifnull(max(wd.time_stamp), 0) as last_upload_time,
|
|
||||||
latest.new_value,
|
|
||||||
wd.data_date
|
wd.data_date
|
||||||
from watch_data_spo2 wd
|
) DATA ON stat.user_id = DATA.bind_user_id
|
||||||
left join (
|
AND stat.data_date = DATA.data_date
|
||||||
select bind_user_id, data_date, data_value as new_value
|
SET stat.max_value = DATA.max_value,
|
||||||
from watch_data_spo2 t1
|
stat.min_value = DATA.min_value,
|
||||||
where (bind_user_id, data_date, time_stamp) in (
|
stat.avg_value = DATA.avg_value,
|
||||||
select bind_user_id, data_date, max(time_stamp)
|
stat.last_upload_time = DATA.last_upload_time,
|
||||||
from watch_data_spo2
|
stat.new_value = DATA.new_value,
|
||||||
group by bind_user_id, data_date
|
stat.org_code = #{orgCode,jdbcType=VARCHAR}
|
||||||
)
|
|
||||||
) latest on wd.bind_user_id = latest.bind_user_id and wd.data_date = latest.data_date
|
|
||||||
where wd.bind_user_id = #{userId,jdbcType=VARCHAR}
|
|
||||||
and wd.data_date = #{dataDate,jdbcType=DATE}
|
|
||||||
group by wd.bind_user_id, wd.data_date, latest.new_value
|
|
||||||
) data on stat.user_id = data.bind_user_id and stat.data_date = data.data_date
|
|
||||||
set stat.max_value = data.max_value,
|
|
||||||
stat.min_value = data.min_value,
|
|
||||||
stat.avg_value = data.avg_value,
|
|
||||||
stat.last_upload_time = data.last_upload_time,
|
|
||||||
stat.new_value = data.new_value,
|
|
||||||
stat.org_code = #{orgCode,jdbcType=VARCHAR}
|
|
||||||
where stat.user_id = #{userId,jdbcType=VARCHAR}
|
where stat.user_id = #{userId,jdbcType=VARCHAR}
|
||||||
and stat.data_date = #{dataDate,jdbcType=DATE};
|
and stat.data_date = #{dataDate,jdbcType=DATE};
|
||||||
</update>
|
</update>
|
||||||
|
|||||||
+43
-41
@@ -19,56 +19,58 @@
|
|||||||
user_id=#{userId}
|
user_id=#{userId}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
|
||||||
<insert id="insertStat">
|
<insert id="insertStat">
|
||||||
insert into watch_stat_user_info_day_stress(id, user_id, max_value, min_value, avg_value, data_date, last_upload_time, new_value, org_code)
|
insert into watch_stat_user_info_day_stress(id, user_id, max_value, min_value, avg_value, data_date, last_upload_time, new_value, org_code)
|
||||||
(select #{id,jdbcType=VARCHAR},
|
(
|
||||||
|
SELECT
|
||||||
|
#{id,jdbcType=VARCHAR},
|
||||||
bind_user_id,
|
bind_user_id,
|
||||||
ifnull(max(data_value), 0),
|
IFNULL( MAX( wd.data_value ), 0 ),
|
||||||
ifnull(min(data_value), 0),
|
IFNULL( MIN( wd.data_value ), 0 ),
|
||||||
ifnull(avg(data_value), 0),
|
IFNULL( AVG( wd.data_value ), 0 ),
|
||||||
data_date,
|
data_date,
|
||||||
ifnull(max(end_time_stamp), NOW()),
|
IFNULL(MAX( wd.end_time_stamp ),NOW()),
|
||||||
ifnull(data_value, 0),
|
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ),
|
||||||
#{orgCode,jdbcType=VARCHAR}
|
#{orgCode,jdbcType=VARCHAR}
|
||||||
from watch_data_stress
|
FROM
|
||||||
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn FROM watch_data_stress
|
||||||
and data_date = #{dataDate,jdbcType=DATE}
|
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
||||||
group by bind_user_id, data_date);
|
and data_date = #{dataDate,jdbcType=DATE}) wd
|
||||||
|
GROUP BY
|
||||||
|
wd.bind_user_id,
|
||||||
|
wd.data_date
|
||||||
|
);
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
|
||||||
<update id="updateStat">
|
<update id="updateStat">
|
||||||
update watch_stat_user_info_day_stress stat
|
UPDATE watch_stat_user_info_day_stress stat
|
||||||
left join (
|
LEFT JOIN (
|
||||||
select
|
SELECT
|
||||||
|
wd.bind_user_id,
|
||||||
|
wd.data_date,
|
||||||
|
IFNULL( MAX( wd.data_value ), 0 ) AS max_value,
|
||||||
|
IFNULL( MIN( wd.data_value ), 0 ) AS min_value,
|
||||||
|
IFNULL( AVG( wd.data_value ), 0 ) AS avg_value,
|
||||||
|
IFNULL(MAX( wd.end_time_stamp ),NOW()) AS last_upload_time,
|
||||||
|
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ) AS new_value
|
||||||
|
FROM
|
||||||
|
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY end_time_stamp DESC ) AS rn FROM watch_data_stress
|
||||||
|
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
||||||
|
and data_date = #{dataDate,jdbcType=DATE}) wd
|
||||||
|
GROUP BY
|
||||||
wd.bind_user_id,
|
wd.bind_user_id,
|
||||||
ifnull(max(wd.data_value), 0) as max_value,
|
|
||||||
ifnull(min(wd.data_value), 0) as min_value,
|
|
||||||
ifnull(avg(wd.data_value), 0) as avg_value,
|
|
||||||
ifnull(max(wd.end_time_stamp), NOW()) as last_upload_time,
|
|
||||||
latest.new_value,
|
|
||||||
wd.data_date
|
wd.data_date
|
||||||
from watch_data_stress wd
|
) DATA ON stat.user_id = DATA.bind_user_id
|
||||||
left join (
|
AND stat.data_date = DATA.data_date
|
||||||
select bind_user_id, data_date, data_value as new_value
|
SET stat.max_value = DATA.max_value,
|
||||||
from watch_data_stress t1
|
stat.min_value = DATA.min_value,
|
||||||
where (bind_user_id, data_date, end_time_stamp) in (
|
stat.avg_value = DATA.avg_value,
|
||||||
select bind_user_id, data_date, max(end_time_stamp)
|
stat.last_upload_time = DATA.last_upload_time,
|
||||||
from watch_data_stress
|
stat.new_value = DATA.new_value,
|
||||||
group by bind_user_id, data_date
|
stat.org_code = #{orgCode,jdbcType=VARCHAR}
|
||||||
)
|
where stat.user_id = #{userId,jdbcType=VARCHAR}
|
||||||
) latest on wd.bind_user_id = latest.bind_user_id and wd.data_date = latest.data_date
|
and stat.data_date = #{dataDate,jdbcType=DATE};
|
||||||
where wd.bind_user_id = #{userId,jdbcType=VARCHAR}
|
|
||||||
and wd.data_date = #{dataDate,jdbcType=DATE}
|
|
||||||
group by wd.bind_user_id, wd.data_date, latest.new_value
|
|
||||||
) data on stat.user_id = data.bind_user_id and stat.data_date = data.data_date
|
|
||||||
set stat.max_value = data.max_value,
|
|
||||||
stat.min_value = data.min_value,
|
|
||||||
stat.avg_value = data.avg_value,
|
|
||||||
stat.last_upload_time = data.last_upload_time,
|
|
||||||
stat.new_value = data.new_value,
|
|
||||||
stat.org_code = #{orgCode,jdbcType=VARCHAR}
|
|
||||||
where stat.user_id = #{userId,jdbcType=VARCHAR}
|
|
||||||
and stat.data_date = #{dataDate,jdbcType=DATE};
|
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
+58
-56
@@ -34,68 +34,70 @@
|
|||||||
order by data_date
|
order by data_date
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
|
||||||
<insert id="insertStat">
|
<insert id="insertStat">
|
||||||
insert into watch_stat_user_info_day_temp(id, user_id, max_value, min_value, avg_value, skin_max_value,
|
insert into watch_stat_user_info_day_temp(id, user_id, max_value, min_value, avg_value, skin_max_value,
|
||||||
skin_min_value, skin_avg_value, last_upload_time, new_value, skin_new_value, data_date, org_code)
|
skin_min_value, skin_avg_value, last_upload_time, new_value,
|
||||||
(select #{id,jdbcType=VARCHAR},
|
skin_new_value, data_date, org_code)
|
||||||
bind_user_id,
|
(SELECT #{id,jdbcType=VARCHAR},
|
||||||
ifnull(max(data_value), 0),
|
bind_user_id,
|
||||||
ifnull(min(data_value), 0),
|
IFNULL(MAX(wd.data_value), 0),
|
||||||
ifnull(avg(data_value), 0),
|
IFNULL(MIN(wd.data_value), 0),
|
||||||
ifnull(max(skin_tempera), 0),
|
IFNULL(AVG(wd.data_value), 0),
|
||||||
ifnull(min(skin_tempera), 0),
|
IFNULL(MAX(wd.skin_tempera), 0),
|
||||||
ifnull(avg(skin_tempera), 0),
|
IFNULL(MIN(wd.skin_tempera), 0),
|
||||||
ifnull(max(time_stamp), NOW()),
|
IFNULL(AVG(wd.skin_tempera), 0),
|
||||||
ifnull(data_value, 0),
|
IFNULL(MAX(wd.time_stamp), NOW()),
|
||||||
ifnull(skin_tempera, 0),
|
MAX(CASE WHEN wd.rn = 1 THEN wd.data_value END),
|
||||||
data_date,
|
MAX(CASE WHEN wd.rn = 1 THEN wd.skin_tempera END),
|
||||||
#{orgCode,jdbcType=VARCHAR}
|
data_date,
|
||||||
from watch_data_temperature
|
#{orgCode,jdbcType=VARCHAR}
|
||||||
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
FROM (SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn
|
||||||
and data_date = #{dataDate,jdbcType=DATE}
|
FROM watch_data_temperature
|
||||||
group by bind_user_id, data_date);
|
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
||||||
|
and data_date = #{dataDate,jdbcType=DATE}) wd
|
||||||
|
GROUP BY wd.bind_user_id,
|
||||||
|
wd.data_date);
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<!-- 切记 此代码不能直接平移至四合一项目 ,该sql只适用mysql8.0及以上版本 ,四合一项目开发测试环境的mysql版本过低 , 但不影响正式环境-->
|
||||||
<update id="updateStat">
|
<update id="updateStat">
|
||||||
update watch_stat_user_info_day_temp stat
|
UPDATE watch_stat_user_info_day_temp stat
|
||||||
left join (
|
LEFT JOIN (
|
||||||
select
|
SELECT
|
||||||
|
wd.bind_user_id,
|
||||||
|
wd.data_date,
|
||||||
|
IFNULL( MAX( wd.data_value ), 0 ) AS max_value,
|
||||||
|
IFNULL( MIN( wd.data_value ), 0 ) AS min_value,
|
||||||
|
IFNULL( AVG( wd.data_value ), 0 ) AS avg_value,
|
||||||
|
IFNULL( MAX( wd.skin_tempera ), 0 ) AS skin_max_value,
|
||||||
|
IFNULL( MIN( wd.skin_tempera ), 0 ) AS skin_min_value,
|
||||||
|
IFNULL( AVG( wd.skin_tempera ), 0 ) AS skin_avg_value,
|
||||||
|
IFNULL(
|
||||||
|
MAX( wd.time_stamp ),
|
||||||
|
NOW()) AS last_upload_time,
|
||||||
|
MAX( CASE WHEN wd.rn = 1 THEN wd.data_value END ) AS new_value,
|
||||||
|
MAX( CASE WHEN wd.rn = 1 THEN wd.skin_tempera END ) AS skin_new_value
|
||||||
|
FROM
|
||||||
|
( SELECT *, ROW_NUMBER() OVER ( PARTITION BY bind_user_id, data_date ORDER BY time_stamp DESC ) AS rn FROM watch_data_temperature
|
||||||
|
where bind_user_id = #{userId,jdbcType=VARCHAR}
|
||||||
|
and data_date = #{dataDate,jdbcType=DATE}) wd
|
||||||
|
GROUP BY
|
||||||
wd.bind_user_id,
|
wd.bind_user_id,
|
||||||
ifnull(max(wd.data_value), 0) as max_value,
|
|
||||||
ifnull(min(wd.data_value), 0) as min_value,
|
|
||||||
ifnull(avg(wd.data_value), 0) as avg_value,
|
|
||||||
ifnull(max(wd.skin_tempera), 0) as skin_max_value,
|
|
||||||
ifnull(min(wd.skin_tempera), 0) as skin_min_value,
|
|
||||||
ifnull(avg(wd.skin_tempera), 0) as skin_avg_value,
|
|
||||||
ifnull(max(wd.time_stamp), NOW()) as last_upload_time,
|
|
||||||
latest.new_value,
|
|
||||||
latest.skin_new_value,
|
|
||||||
wd.data_date
|
wd.data_date
|
||||||
from watch_data_temperature wd
|
) DATA ON stat.user_id = DATA.bind_user_id
|
||||||
left join (
|
AND stat.data_date = DATA.data_date
|
||||||
select bind_user_id, data_date, data_value as new_value, skin_tempera as skin_new_value
|
SET stat.max_value = DATA.max_value,
|
||||||
from watch_data_temperature t1
|
stat.min_value = DATA.min_value,
|
||||||
where (bind_user_id, data_date, time_stamp) in (
|
stat.avg_value = DATA.avg_value,
|
||||||
select bind_user_id, data_date, max(time_stamp)
|
stat.skin_max_value = DATA.skin_max_value,
|
||||||
from watch_data_temperature
|
stat.skin_min_value = DATA.skin_min_value,
|
||||||
group by bind_user_id, data_date
|
stat.skin_avg_value = DATA.skin_avg_value,
|
||||||
)
|
stat.last_upload_time = DATA.last_upload_time,
|
||||||
) latest on wd.bind_user_id = latest.bind_user_id and wd.data_date = latest.data_date
|
stat.new_value = DATA.new_value,
|
||||||
where wd.bind_user_id = #{userId,jdbcType=VARCHAR}
|
stat.skin_new_value = COALESCE ( NULLIF( DATA.skin_new_value, 0 ), stat.skin_new_value ),
|
||||||
and wd.data_date = #{dataDate,jdbcType=DATE}
|
stat.org_code = #{orgCode,jdbcType=VARCHAR}
|
||||||
group by wd.bind_user_id, wd.data_date, latest.new_value, latest.skin_new_value
|
where stat.user_id = #{userId,jdbcType=VARCHAR}
|
||||||
) data on stat.user_id = data.bind_user_id and stat.data_date = data.data_date
|
and stat.data_date = #{dataDate,jdbcType=DATE};
|
||||||
set stat.max_value = data.max_value,
|
|
||||||
stat.min_value = data.min_value,
|
|
||||||
stat.avg_value = data.avg_value,
|
|
||||||
stat.skin_max_value = data.skin_max_value,
|
|
||||||
stat.skin_min_value = data.skin_min_value,
|
|
||||||
stat.skin_avg_value = data.skin_avg_value,
|
|
||||||
stat.last_upload_time = data.last_upload_time,
|
|
||||||
stat.new_value = data.new_value,
|
|
||||||
stat.skin_new_value = IF(data.skin_new_value IS NULL OR data.skin_new_value = 0, stat.skin_new_value, data.skin_new_value),
|
|
||||||
stat.org_code = #{orgCode,jdbcType=VARCHAR}
|
|
||||||
where stat.user_id = #{userId,jdbcType=VARCHAR}
|
|
||||||
and stat.data_date = #{dataDate,jdbcType=DATE};
|
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user