如何结合表中DT_START列与SYSDATE动态获取最新ID_Interval
实现方案
你可以通过DT_START结合SYSDATE实现动态拉取最新ID_Interval的需求,以下是两种常用的实现写法:
写法1:匹配当月生效记录(当月数据已生成的场景)
如果每月生成的ID_Interval对应的DT_START字段值落在当月自然月范围内,可以直接按年月匹配,完全动态无需手动调整参数:
SELECT ID_Interval FROM t_usage_interval WHERE TRUNC(DT_START, 'MONTH') = TRUNC(SYSDATE, 'MONTH');
写法2:取最近生效的记录(兼容当月暂未生成数据的场景)
如果存在月初还未生成当月新ID_Interval的情况,可以排序后取时间最近的一条记录,避免查询为空:
适配支持
FETCH FIRST语法的数据库(Oracle 12c+、PostgreSQL、MySQL 8.0+等)
SELECT ID_Interval FROM t_usage_interval WHERE DT_START <= SYSDATE ORDER BY DT_START DESC FETCH FIRST 1 ROW ONLY;
适配Oracle 11g及更早不支持
FETCH FIRST语法的版本
SELECT ID_Interval FROM ( SELECT ID_Interval FROM t_usage_interval WHERE DT_START <= SYSDATE ORDER BY DT_START DESC ) WHERE ROWNUM = 1;
注意事项
- 如果表数据量较大,建议给
DT_START字段添加索引,可大幅提升查询效率 - 确保每月生成记录时
DT_START字段赋值规则和查询逻辑匹配,避免出现取数错误
内容的提问来源于stack exchange,提问作者Asireb Rimas
相关产品推荐
相关产品推荐

