SELECT
date_format(
date_sub(
curdate(),INTERVAL(
cast(help_topic_id AS signed)-0)DAY),'%Y-%m-%d')MONTHFROM
mysql.help_topic
WHERE# 符号转移需替换 <![CDATA[<]]>; 此处n数字替换成需要近n天距离当前的日期,如:30
help_topic_id < n
ORDERBY
help_topic_id DESC
输出0-23
SELECT
help_topic_id
FROM
mysql.help_topic
WHERE
help_topic_id <24
输出当前时间 24小时列表 yy-MM-dd hh
selectLEFT(
DATE_ADD(CURDATE(),INTERVAL(CAST(help_topic_id as signed)-0)hour),13)asMONTHfrom
mysql.help_topic
where
help_topic_id <24ORDERBY help_topic_id
趋势分析使用模板
SELECT
a.MONTHastime,
ifnull(b.num,0)as num
FROM(# 这里使用 上面获取指定时间的sqlSELECT
date_format(date_sub(concat(YEAR(curdate()),'-12-31'),INTERVAL(cast(help_topic_id AS signed)-0)MONTH),'%Y-%m')MONTHFROM
mysql.help_topic
WHERE
help_topic_id <![CDATA[<]]>12ORDERBY
help_topic_id
) a
LEFTJOIN(# 这里是查询具体业务表 输出结果中一定要有日期和上面输出的日期(a.MONTH)匹配SELECT
c.number as num,...
date_format(c.time,'%Y-%m')astimeFROM
tableC as c
GROUPBY# 格式化业务表 tableC 中的日期字段,保证和上面时间sql获取到的保持一致
date_format(c.time,'%Y-%m'))AS b
ON b.time= a.MONTHORDERBY a.MONTH
趋势分析自动适配模板
# 1.全局进行替换 #{beginTime} #{endTime}# 2.修改标注的地方# 3.支持小时(%Y-%m-%d %H)、天数(%Y-%m-%d)、月数(%Y-%m)、年数(%Y)趋势的自适应适配SELECT
a.MONTHas name,
ifnull(b.num,0)asvalueFROM(SELECTcasewhen timestampdiff(MONTH, date_format(#{beginTime}, '%Y-%m-%d'),date_format(#{endTime}, '%Y-%m-%d')) = 0 then (casewhen timestampdiff(HOUR,date_format(#{beginTime}, '%Y-%m-%d %H:%i:%s '), date_format(#{endTime}, '%Y-%m-%d %H:%i:%s')) < 24 then (date_format(date_sub(#{endTime}, INTERVAL (cast(help_topic_id AS signed) - 0) HOUR),'%Y-%m-%d %H'))else date_format(date_sub(#{endTime}, INTERVAL (cast(help_topic_id AS signed) - 0) DAY), template.dateFormatTemplate) end )when timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) < 12 then date_format(date_sub(#{endTime}, INTERVAL (cast(help_topic_id AS signed) - 0) MONTH), template.dateFormatTemplate)else date_format(date_sub(#{endTime}, INTERVAL (cast(help_topic_id AS signed) - 0) YEAR), template.dateFormatTemplate) end as`MONTH`FROM
mysql.help_topic topic LEFTJOIN(# 无问题SELECTcasewhen timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) = 0 then '%Y%m%d'when timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) < 12 then '%Y%m'else'%Y'endas dateTemplate,casewhen timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) = 0 then 'DAY'when timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) < 12 then 'MONTH'else'YEAR'endas dateModel,casewhen timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) = 0 then (casewhen timestampdiff(HOUR,date_format(#{beginTime}, '%Y-%m-%d %H:%i:%s'), date_format(#{endTime}, '%Y-%m-%d %H:%i:%s')) < 24 then '%Y-%m-%d %H' else '%Y-%m-%d' end)when timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) < 12 then '%Y-%m'else'%Y'endas dateFormatTemplate
) template on1=1WHERE# 无问题
help_topic_id <(selectcasewhen timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) = 0 then (casewhen timestampdiff(HOUR,date_format(#{beginTime}, '%Y-%m-%d %H:%i:%s'), date_format(#{endTime}, '%Y-%m-%d %H:%i:%s')) < 24 then timestampdiff(HOUR, date_format(#{beginTime}, '%Y-%m-%d %H:%i:%s'), date_format(#{endTime}, '%Y-%m-%d %H:%i:%s')) + 1else timestampdiff(DAY, date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime},'%Y-%m-%d')) + 1 end )when timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) < 12 then timestampdiff(MONTH, date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) + 1else timestampdiff(YEAR, date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) + 1 end )) a
LEFTJOIN(# 这里需要修改 业务表查询SELECTcount(c.id)as num,
date_format(c.evaluate_time,date.dateFormatTemplate)astimeFROM
tb_marketing_evaluate as c
# 这里不能修改LEFTJOIN(SELECTcasewhen timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) = 0 then (casewhen timestampdiff(HOUR,date_format(#{beginTime}, '%Y-%m-%d %H:%i:%s'), date_format(#{endTime}, '%Y-%m-%d %H:%i:%s')) < 24 then '%Y-%m-%d %H' else '%Y-%m-%d' end)when timestampdiff(MONTH,date_format(#{beginTime}, '%Y-%m-%d'), date_format(#{endTime}, '%Y-%m-%d')) < 12 then '%Y-%m'else'%Y'endas dateFormatTemplate
)dateon1=1# 这里需要修改 c.evaluate_time 改为对应的字段WHERE c.evaluate_time >=#{beginTime}and c.evaluate_time <=#{endTime}GROUPBY
date_format(c.evaluate_time,date.dateFormatTemplate))AS b
ON b.time= a.MONTHORDERBY a.MONTH