You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据指定日期和ID查询连续50天内的Activity活动记录

没问题,我来帮你解决这个日期范围查询的需求,整理后的内容如下:

问题描述

现有一个临时表#activity,存储着用户的活动时间段数据,现在需要根据指定的日期(2016年12月1日)和ID,查询所有处于该日期起连续50天范围内的活动记录。

临时表结构与测试数据

首先是临时表的创建和数据插入语句:

create table #activity(id int, begin_date datetime, end_date datetime)
insert into #activity values(1, '1/1/2017', '1/31/2017')
insert into #activity values(1, '9/1/2017', '9/15/2017')
insert into #activity values(1, '4/1/2017', '4/15/2017')
insert into #activity values(1, '2/5/2017', '2/15/2017')
insert into #activity values(1, '8/1/2017', '8/31/2017')
Insert into #activity values(2, '11/1/2016', '11/15/2016')
核心思路

我们要筛选的是活动时间段与指定日期的50天窗口存在重叠的记录。这里的50天窗口是从2016-12-01到2017-01-19(因为起始日加49天就是第50天的结束)。

两个时间段相交的判断逻辑是:活动的开始日期 ≤ 窗口结束日期,并且活动的结束日期 ≥ 窗口开始日期,只要满足这个条件,就说明活动和目标窗口有重叠,需要被查询出来。

最终查询SQL

下面是可直接使用的查询语句,你可以替换@TargetId为实际需要查询的ID:

-- 定义目标日期和50天窗口的结束日期
DECLARE @TargetDate DATETIME = '2016-12-01'
DECLARE @WindowEnd DATETIME = DATEADD(day, 49, @TargetDate)
DECLARE @TargetId INT = 1 -- 替换为你要查询的ID

SELECT id, begin_date, end_date
FROM #activity
WHERE id = @TargetId
  -- 判断活动时间段与50天窗口是否重叠
  AND begin_date <= @WindowEnd
  AND end_date >= @TargetDate

举个例子:如果查询ID=1,那么只有2017年1月的活动会被选中(它的时间段和2016-12-01至2017-01-19的窗口有重叠);如果查询ID=2,它的活动在2016年11月,完全在窗口之外,所以不会返回任何结果。

内容的提问来源于stack exchange,提问作者blue pink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:13:09