如何获取与本周当前日期时间匹配的上周对应时段数据?
解决上周数据与本周当前时段精准匹配的SQL查询问题
你需要的是上周数据中,与本周截至当前日期时间的时长完全匹配的部分——即上周对应本周当前日期之前的所有天数全天保留,仅上周对应本周当前日期的当天,截取到与当前时间相同的时段。
以下是修改后的SQL查询条件,完美匹配你的需求:
WHERE /* 当前年份 */ YEAR(DATE_FIELD) = YEAR(GETDATE()) /* 上周 */ AND DATEPART(week, DATE_FIELD) = DATEPART(week, GETDATE()) - 1 /* 核心匹配逻辑:上周早于对应本周当前日期的天数全保留,对应当天仅保留到当前时间 */ AND ( -- 上周日期早于本周当前日期对应的上周日期(如本周周二,上周的周日、周一) CAST(DATE_FIELD AS DATE) < DATEADD(week, -1, CAST(GETDATE() AS DATE)) OR -- 上周日期等于本周当前日期对应的上周日期,且时间不晚于当前时间 ( CAST(DATE_FIELD AS DATE) = DATEADD(week, -1, CAST(GETDATE() AS DATE)) AND DATE_FIELD <= DATEADD(week, -1, GETDATE()) ) )
逻辑说明
- 用
CAST(DATE_FIELD AS DATE)提取日期部分,和DATEADD(week, -1, CAST(GETDATE() AS DATE))(本周当前日期往前推一周的纯日期)做比较:- 当上周日期早于这个对应日期时,说明是上周的"前几天"(比如你示例中的周日、周一),这部分数据全部保留,不限制时间范围。
- 当上周日期等于这个对应日期时,说明是上周的"对应当天"(示例中的上周周二),此时用
DATE_FIELD <= DATEADD(week, -1, GETDATE())限制时间不超过当前时间往前推一周的时刻,确保和本周当前时长完全对齐。
你之前直接加小时限制的问题在于,会把所有天数的时间都截断,而这个逻辑只针对上周的"对应当天"做时间限制,其他天数不受影响。
内容的提问来源于stack exchange,提问作者jsg5120
相关产品推荐
相关产品推荐

