在SAS连接Snowflake中,如何筛选trdate为s_date后4天的数据?
SAS连接Snowflake日期筛选语法修正
Snowflake中日期加减有两种常用标准语法:
- 使用
DATEADD函数:DATEADD(day, 天数, 日期字段) - 使用间隔表达式:
日期字段 + INTERVAL 'N days'
结合你的需求和现有代码,分不同逻辑场景给出修正方案:
场景1:匹配a.s_date在b.trdate至b.trdate后4天范围内的数据
延续你原代码between语句的逻辑,补全后的完整代码如下:
create table post_date as select * from connection to snf( select distinct A.* , b.PA , b.tc , b.trdate from stemptable as A left join table B on A.rp=b.PA where a.s_date between b.trdate and DATEADD(day, 4, b.trdate) );
也可以用间隔表达式写法:
create table post_date as select * from connection to snf( select distinct A.* , b.PA , b.tc , b.trdate from stemptable as A left join table B on A.rp=b.PA where a.s_date between b.trdate and b.trdate + INTERVAL '4 days' );
场景2:匹配b.trdate在a.s_date至a.s_date后4天范围内的数据
如果你的实际需求是保留b.trdate在a.s_date之后4天内的关联数据,调整where条件如下:
create table post_date as select * from connection to snf( select distinct A.* , b.PA , b.tc , b.trdate from stemptable as A left join table B on A.rp=b.PA where b.trdate between a.s_date and DATEADD(day, 4, a.s_date) );
注意事项
使用left join时,若在where子句中限制右表(B)字段,会将左连接转为内连接效果。如果需要保留A表所有数据,仅匹配符合日期条件的B表数据,应将日期条件移至on子句:
create table post_date as select * from connection to snf( select distinct A.* , b.PA , b.tc , b.trdate from stemptable as A left join table B on A.rp=b.PA and b.trdate between a.s_date and DATEADD(day, 4, a.s_date) );
内容的提问来源于stack exchange,提问作者TheJenk
相关产品推荐
相关产品推荐

