mysql动态创建连续时间段

该博客探讨了一种使用SQL构造连续时间序列的方法,适用于统计特定时间段内的业务情况。通过调整INTERVAL参数,可以实现年、月、日的不同时间粒度。示例代码展示了如何从当前日期开始向前推30年,并通过与`mysql`.`help_topic`表关联,形成连续的时间基表。在实际应用中,可以根据需求改变连续时间长度,并结合业务表进行统计分析。注意在不同时间单位转换时可能需要处理日期格式。
摘要由CSDN通过智能技术生成
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>

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值