```xml
<select id="getI10V3List" resultMap="BaseResultMap" resultType="list">
SELECT sm.stove_volume, sm.issue_num, MAX(tpfr.create_time) AS max_time ,tpfr.stove_num, tpfr.stove_code, AVG(tpfr.temp_3) as davg3 FROM temp_press_feed_rate tpfr LEFT JOIN stove_manage sm ON tpfr.stove_num = sm.stove_num WHERE stove_code IS NOT NULL AND sm.stove_volume=10 AND sm.issue_num='一期' AND tpfr.create_time <![CDATA[ >= ]]> DATE_FORMAT(LAST_DAY(CURRENT_DATE - INTERVAL 1 MONTH) + INTERVAL 1 DAY - INTERVAL 1 MONTH, '%Y-%m-26')
AND tpfr.create_time <![CDATA[ <= ]]> DATE_FORMAT(LAST_DAY(CURRENT_DATE), '%Y-%m-25') GROUP BY tpfr.stove_num, tpfr.stove_code ,sm.stove_volume, sm.issue_num ORDER BY tpfr.stove_num
</select>
请教:周期以上月26号到本月25号为月度计量,以上可查询出来上个周期的数据,但如何获取每一个周期数据。比如3个月前数据,一年零3个月的数据。
该回答引用ChatGPT-3.5,仅供参考,不保证完全正确
要获取每个周期(如3个月前或一年零3个月前)的数据,你可以使用日期函数和相对日期的计算来实现。
以下是一个示例,演示如何获取3个月前的数据:
SELECT sm.stove_volume, sm.issue_num, MAX(tpfr.create_time) AS max_time ,tpfr.stove_num, tpfr.stove_code, AVG(tpfr.temp_3) AS davg3
FROM temp_press_feed_rate tpfr
LEFT JOIN stove_manage sm ON tpfr.stove_num = sm.stove_num
WHERE stove_code IS NOT NULL
AND sm.stove_volume = 10
AND sm.issue_num = '一期'
AND tpfr.create_time >= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 3 MONTH), '%Y-%m-26')
AND tpfr.create_time <= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 2 MONTH), '%Y-%m-25')
GROUP BY tpfr.stove_num, tpfr.stove_code, sm.stove_volume, sm.issue_num
ORDER BY tpfr.stove_num
在上述代码中,使用DATE_SUB()
函数和INTERVAL
关键字来计算日期的相对值。DATE_SUB(CURRENT_DATE, INTERVAL 3 MONTH)
表示当前日期减去3个月,DATE_SUB(CURRENT_DATE, INTERVAL 2 MONTH)
表示当前日期减去2个月。然后,使用DATE_FORMAT()
函数将日期格式化为所需的形式(月度计量的开始日期和结束日期)。根据这些条件,查询可以获取3个月前的数据。
类似地,你可以根据需要,使用DATE_SUB()
函数和INTERVAL
关键字来计算其他周期的数据。例如,如果要获取一年零3个月前的数据,可以将INTERVAL
的值设置为1 YEAR + 3 MONTH
。根据你的具体需求,进行相应的日期计算即可。
以下回答部分参考了GPT,你看是否可以帮你解决问题:
根据您提供的 SQL 查询语句,您正在查找某个特定周期内的数据。要获取不同周期的数据,您可以使用日期函数和条件来调整查询语句。
以下是一些示例:
获取3个月前的数据:
SELECT sm.stove_volume, sm.issue_num, MAX(tpfr.create_time) AS max_time, tpfr.stove_num, tpfr.stove_code, AVG(tpfr.temp_3) AS davg3
FROM temp_press_feed_rate tpfr
LEFT JOIN stove_manage sm ON tpfr.stove_num = sm.stove_num
WHERE stove_code IS NOT NULL
AND sm.stove_volume = 10
AND sm.issue_num = '一期'
AND tpfr.create_time >= DATE_FORMAT(LAST_DAY(CURRENT_DATE - INTERVAL 4 MONTH) + INTERVAL 1 DAY - INTERVAL 4 MONTH, '%Y-%m-26') -- 注意这里是4个月前
AND tpfr.create_time <= DATE_FORMAT(LAST_DAY(CURRENT_DATE - INTERVAL 3 MONTH), '%Y-%m-25') -- 注意这里是3个月前的最后一天
GROUP BY tpfr.stove_num, tpfr.stove_code, sm.stove_volume, sm.issue_num
ORDER BY tpfr.stove_num
获取一年零3个月前的数据:
SELECT sm.stove_volume, sm.issue_num, MAX(tpfr.create_time) AS max_time, tpfr.stove_num, tpfr.stove_code, AVG(tpfr.temp_3) AS davg3
FROM temp_press_feed_rate tpfr
LEFT JOIN stove_manage sm ON tpfr.stove_num = sm.stove_num
WHERE stove_code IS NOT NULL
AND sm.stove_volume = 10
AND sm.issue_num = '一期'
AND tpfr.create_time >= DATE_FORMAT(LAST_DAY(CURRENT_DATE - INTERVAL 15 MONTH) + INTERVAL 1 DAY - INTERVAL 15 MONTH, '%Y-%m-26') -- 注意这里是15个月前
AND tpfr.create_time <= DATE_FORMAT(LAST_DAY(CURRENT_DATE - INTERVAL 12 MONTH), '%Y-%m-25') -- 注意这里是12个月前的最后一天
GROUP BY tpfr.stove_num, tpfr.stove_code, sm.stove_volume, sm.issue_num
ORDER BY tpfr.stove_num
请根据您的需求进行适当的调整。注意,在修改查询语句之前,请备份您的数据或进行测试,以确保查询结果正确无误。