1

助けていただけませんか。2つの日付列があります。

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年以上離れていた場合は、この終了日の次の開始日を返したいと思います。1年未満の場合は、前回の開始日を返却したいと思います。

上記の例では、彼の開始日は2010年1月1日である必要があります。

彼は2007年に最初に始めましたが、2008年に去り、1年以上ある2010年に戻ってきました。したがって、ここでは、彼の開始日は、1年のギャップの後に開始した日付である2010年1月1日です。

彼は再び2010年7月7日に去りましたが、1年未満である2010年8月15日に戻ってきました。したがって、開始日は2010年1月1日のままです。

これが明確であることを願っています。

4

1 に答える 1

0

探しているのは、そのレコードの開始日より 1 年前の開始日がない最新のレコードです。このレコードには、希望する開始が含まれています。

これらのレコードを見つけて、最新の日付を取得する方法は次のとおりです。

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 に答える