Databricks SQL WHERE子句中查询近6个月数据的语法问题
问题分析与解决
你的查询语句没返回结果,核心是WHERE子句的逻辑完全错误:
先明确
datediff的参数规则:Databricks SQL中datediff(endDate, startDate)返回的是endDate减去startDate的天数差。你写的datediff(add_months(date_column, -6), date_column)里,add_months(date_column, -6)是把date_column往前推6个月的日期(比原日期更早),用更早的日期作为endDate、原日期作为startDate,得到的结果是负数,永远不可能等于1,自然查不到数据。要筛选近6个月的数据,分两种常见场景:
场景1:筛选当前日期往前推6个月至今的记录
这是最常用的需求,用current_date()获取当前日期,往前推6个月作为筛选下限:
SELECT * FROM table WHERE date_column >= add_months(current_date(), -6)
场景2:筛选每条记录date_column自身往前推6个月内的区间(无实际筛选意义,仅逻辑说明)
如果是想取每条记录对应的过去6个月范围,这个条件其实永远成立(除非date_column为null),写法如下:
SELECT * FROM table WHERE date_column >= add_months(date_column, -6)
补充:如果你的date_column是带时间戳的字段,也可以用current_timestamp()替代current_date(),保证字段类型匹配。
内容的提问来源于stack exchange,提问作者Samantha Clark
相关产品推荐
相关产品推荐

