1

你能帮我吗,我有两个日期列:

Name  Member_type  start_date  end_date
----  -----------  ----------  ----------
a     1            03-01-2007  25-12-2008
a     2            01-01-2010  07-07-2010
a     1            15-08-2010  31-12-2013

对于 person a,我想返回他的第一个开始日期。如果他自结束日期起离开一年以上,那么我想返回此结束日期之后的开始日期。如果不到 1 年,我想返回他之前的开始日期。

在上面的例子中,他的开始日期应该是 01-01-2010。

他从2007年开始创业,2008年离开,2010年回来,也就是一年多。所以在这里,他的开始日期将是他在 1 年间隔之后开始的日期,即 01-01-2010。

他在 2010 年 7 月 7 日再次离开,但在 2010 年 8 月 15 日回来,不到一年。因此,开始日期仍将是 01-01-2010。

希望这很清楚。

4

1 回答 1

0

您要查找的是最近的记录,其中在该记录开始日期之前一年没有开始日期。此记录包含您想要的开始。

这是一种通过查找这些记录,然后获取最新日期的方法:

select t.name, max(t.startdate) as mostRecentRealStart
from t
where not exists (select 1
                  from t t2
                  where t2.name = t.name and t2.enddate between t.startdate - 365 and t.startdate - 1
                 )
group by t.name
于 2013-03-07T01:05:37.283 回答