mysql如何动态创建连续时间段
更新时间:2024年01月12日 10:11:31 作者:优秀的胡茬
这篇文章主要介绍了mysql如何动态创建连续时间段问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
mysql动态创建连续时间段
SELECT ((( SELECT ( curdate() - INTERVAL 30 YEAR )) - INTERVAL 1 YEAR ) + INTERVAL ( cast( `mysql`.`help_topic`.`help_topic_id` AS signed ) + 1 ) YEAR ) AS `current_week` FROM `mysql`.`help_topic` WHERE ( `mysql`.`help_topic`.`help_topic_id` < 30) ORDER BY `mysql`.`help_topic`.`help_topic_id`
忘了原sql是从哪里找到的了,给改造了一下,上边的是构造当前时间向前推30年的连续年,需要连续月就把“YEAR”改成“MONTH”即可得到连续月;同理,需要连续天则改成“DAY”。
需要构造连续多少条时间就把30改成对应需要的数字,以此作为基表关联业务表即可统计连续时间段业务情况。
在mapper.xml中写自己的逻辑即可
仅供参考:
<select id="select" resultMap="Vo">
select d.date,count(t.id) count
form
(SELECT
(((
SELECT
( curdate() - INTERVAL #{连续时间长度}
<if test="判断传入参数">
YEAR
</if>
)) - INTERVAL 1
<if test="判断传入参数">
YEAR
</if>
) + INTERVAL ( cast( `mysql`.`help_topic`.`help_topic_id` AS signed ) + 1 )
<if test="判断传入参数">
YEAR
</if>
) AS `current_week`
FROM
`mysql`.`help_topic`
WHERE
(
`mysql`.`help_topic`.`help_topic_id` < #{连续时间长度} )
ORDER BY
`mysql`.`help_topic`.`help_topic_id`) d
left join (
/** 具体的业务表 */
)T on T.date = d.date
</select>如果按非当前时间计算还需要考虑到日期格式转换
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MySQL 8.0找不到 my.ini 配置文件(并开启 Binlog 
本文主要介绍了MySQL 8.0找不到 my.ini 配置文件(并开启 Binlog 监听),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-06-06
Windows server 2008 r2下MySQL5.7.17 winx64安装版配置方法图文教程
这篇文章主要为大家详细介绍了Windows server 2008 r2下MySQL5.7.17 winx64安装版配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-03-03


最新评论