你能帮帮我吗,我有两个日期栏:
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。
希望这很清楚。
答案 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