如何用SQL查询日期列的最大周及往前4周数据?
解决周粒度日期表取最大日期及往前4周数据的问题
你的需求是从周粒度日期表中,获取最大日期以及往前推4周的日期(共5条记录),之前使用DATEADD(DAY,-7*5,DATE_COLUMN)的方式逻辑有误,导致未得到预期结果。
正确方案1:筛选原表中符合范围的日期
先获取表中的最大日期,再筛选出大于等于「最大日期减28天(4周)」的记录,SQL如下:
SELECT Date_Column FROM your_table_name WHERE Date_Column >= DATEADD(DAY, -28, (SELECT MAX(Date_Column) FROM your_table_name)) ORDER BY Date_Column DESC;
该语句会返回原表中从最大日期往前推4周内的所有周日期,和你的预期结果一致。
正确方案2:递归生成目标日期(适用于原表可能缺周的情况)
如果需要直接生成这5个周日期,不管原表是否存在缺失,可使用递归CTE:
WITH DateSeries AS ( -- 起始为表中最大日期 SELECT MAX(Date_Column) AS week_date FROM your_table_name UNION ALL -- 每次往前推7天,直到生成够5个日期 SELECT DATEADD(DAY, -7, week_date) FROM DateSeries WHERE week_date > DATEADD(DAY, -28, (SELECT MAX(Date_Column) FROM your_table_name)) ) SELECT week_date AS Date_Column FROM DateSeries ORDER BY week_date DESC;
你之前的问题所在
DATEADD(DAY,-7*5,DATE_COLUMN)是对表中每一条日期记录都减去35天,而不是筛选出符合范围的日期,这和你的需求逻辑不符,所以无法得到想要的结果。
内容的提问来源于stack exchange,提问作者msitrocker1990
相关产品推荐
相关产品推荐

