合并日期

时间:2013-03-06 23:38:05

标签: sql sql-server-2008

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

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

对于a人,我想返回他的第一个开始日期。 如果他自结束日期起已经离开超过一年,那么我想在此结束日期之后返回开始日期。 如果不到1年,我想返回他之前的开始日期。

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

他最初于2007年开始,但他于2008年离开并于2010年回归,这已经超过一年了。所以在这里,他的开始日期是他在1年差距后开始的日期,即01-01-2010。

他于07-07-2010再次离开,但在15-08-2010回来,不到一年。因此,开始日期仍为01-01-2010。

希望这很清楚。

1 个答案:

答案 0 :(得分: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