Teradata SQL中生成日期序列下一个可用值的查询语法求助
Teradata SQL 获取下一个可用BUS_DAY_SEQ的实现
核心逻辑
利用Teradata支持的IGNORE NULLS窗口函数参数,结合FIRST_VALUE筛选当前日期之后第一个非空的BUS_DAY_SEQ值。
基础版(包含当前行非空值)
如果当前行的BUS_DAY_SEQ非空,NEXT_BUS_DAY_SEQ会返回当前值;如果当前行空,则返回后续第一个非空值:
SELECT CALENDAR_DATE, BUS_DAY_SEQ, FIRST_VALUE(BUS_DAY_SEQ IGNORE NULLS) OVER ( ORDER BY CALENDAR_DATE ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) AS NEXT_BUS_DAY_SEQ FROM your_table;
进阶版(仅取当前行之后的非空值)
如果需要排除当前行,只取当前日期之后的第一个非空BUS_DAY_SEQ,调整窗口范围即可:
SELECT CALENDAR_DATE, BUS_DAY_SEQ, FIRST_VALUE(BUS_DAY_SEQ IGNORE NULLS) OVER ( ORDER BY CALENDAR_DATE ASC ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) AS NEXT_BUS_DAY_SEQ FROM your_table;
关键参数说明
IGNORE NULLS:让窗口函数跳过空值,直接定位到第一个非空的BUS_DAY_SEQROWS BETWEEN ... AND ...:定义窗口范围,确保只从当前行(或下一行)开始往后查找ORDER BY CALENDAR_DATE ASC:保证按日期顺序查找后续的可用值
内容的提问来源于stack exchange,提问作者ptc3
相关产品推荐
相关产品推荐

