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>

如果按非当前时间计算还需要考虑到日期格式转换

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论