使用Amazon Red Shift提取近7天数据,不使用current_date函数的替代方案
替代
current_date提取Redshift过去7天数据的方案 嘿,在Amazon Redshift里不用current_date提取过去7天数据的方法其实有不少,我给你整理几个常用且靠谱的方案:
使用
SYSDATE配合日期计算SYSDATE是Redshift支持的Oracle兼容函数,返回当前系统的日期时间。如果只需要日期维度的过滤,可以用TRUNC(SYSDATE)截断时间部分得到当前日期,再减去7天:SELECT * FROM your_target_table WHERE your_date_column >= TRUNC(SYSDATE) - INTERVAL '7 days';如果你习惯用
DATEADD函数来做日期偏移,写法会更清晰:SELECT * FROM your_target_table WHERE your_date_column >= DATEADD(day, -7, TRUNC(SYSDATE));使用
GETDATE()函数
这是PostgreSQL兼容的函数,同样返回当前的timestamp类型值。用法和SYSDATE类似:SELECT * FROM your_target_table WHERE your_date_column >= TRUNC(GETDATE()) - INTERVAL '7 days';用
DATEADD的版本:SELECT * FROM your_target_table WHERE your_date_column >= DATEADD(day, -7, TRUNC(GETDATE()));精确时间范围查询(包含时分秒)
如果你的日期字段是timestamp类型,想要获取从当前时间往前推7天整的所有数据(比如现在是2024-05-20 14:30,就取2024-05-13 14:30之后的数据),可以不用截断时间,直接计算:SELECT * FROM your_target_table WHERE your_date_column >= SYSDATE - INTERVAL '7 days';或者用
GETDATE():SELECT * FROM your_target_table WHERE your_date_column >= GETDATE() - INTERVAL '7 days';
小建议
如果你的表是按日期分区的,尽量用TRUNC(your_date_column)来匹配过滤条件,这样Redshift可以触发分区剪枝,跳过不需要扫描的分区,大幅提升查询性能。比如:
SELECT * FROM your_partitioned_table WHERE TRUNC(your_date_column) >= TRUNC(SYSDATE) - INTERVAL '7 days';
内容的提问来源于stack exchange,提问作者Taukheer
相关产品推荐
相关产品推荐

