我如何迭代日期列以检查SQL中的标准



在SQL Server 2008数据库中,我正在尝试识别每个具有符合以下条件的相应日期的ID:

  1. 每个ID中的2个日期> =相隔3个月?
  2. 那些相同的2个日期< =相隔24个月?

我可以在下一行进行比较,但这并不能告诉我第1行是否符合条件,还是第5和7行,等等。

这是表结构(实际表中有大约100,000行(:

select ID, Date from #tmp;
ID  Date
ID1 7/2/2016
ID1 10/19/2016
ID1 1/21/2017
ID1 7/19/2017
ID2 11/26/2015
ID2 2/10/2016
ID2 5/23/2016
ID3 6/15/2017
ID3 6/30/2017

所以ID1和ID2都有符合标准的日期,但是ID3的日期不符合第一条标准(相距3个月(。

这是我到目前为止尝试过的自加入:

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
;

问题在于它仅检查连续行,并且不会在同一ID中互相检查每一行。

任何建议都将不胜感激!

您的问题简化为询问日期的总跨度是否在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));

请注意,如果您询问有关相邻日期,那是另一个问题,而不是这个问题。问一个新问题,您是否真正打算。

最新更新