如何迭代日期列以检查SQL中的条件?

如何迭代日期列以检查SQL中的条件?,sql,sql-server,Sql,Sql Server,在SQL Server 2008数据库中,我试图识别每个ID,这些ID具有满足以下条件的相应日期: 每个ID内是否有两个日期间隔>=3个月? 这两个日期是否相同您的问题简化为询问这两个日期的总跨度是否在3到24个月之间。您可以简单地执行以下操作: select id from #tmp group by id having max(date) >= dateadd(month, 3, min(date)) and max(date) < dateadd(month, 2

在SQL Server 2008数据库中,我试图识别每个ID,这些ID具有满足以下条件的相应日期:

每个ID内是否有两个日期间隔>=3个月?
这两个日期是否相同您的问题简化为询问这两个日期的总跨度是否在3到24个月之间。您可以简单地执行以下操作:

select id
from #tmp
group by id
having max(date) >= dateadd(month, 3, min(date)) and
       max(date) < dateadd(month, 24, min(date));

请注意,如果您询问的是相邻日期,那么这是另一个问题,而不是这个问题。问一个新问题,如果这是你真正想要的。

问题是,如果日期的总跨度超过24个月,但在这两个跨度之间存在两个日期,相隔不到24个月,那么这就不能说明这一点。例如,2015年1月1日、2015年1月2日、2015年5月3日、2018年3月26日。这可以通过游标和while循环实现吗?
with NextDateTable as
(
select
ID
,Date
,rn=rank() over (partition by ID order by Date asc)
from #tmp
)
select
a.ID
,a.Date
,NextDate=b.Date
into #tmp2
from NextDateTable a
left join NextDateTable b on a.ID=b.ID and b.rn=a.rn+1
order by ID,Date
;
select 
ID
,Date
,NextDate
,case
when ((Date is not null) and (NextDate is not null))
 and 
    datediff(mm,Date,NextDate)>=3
and
    datediff(mm,Date,NextDate)<=24
then 1
else 0
end as Check
into #tmp3
from #tmp2
;
select id
from #tmp
group by id
having max(date) >= dateadd(month, 3, min(date)) and
       max(date) < dateadd(month, 24, min(date));