次の点を考慮してください。
CREATE TABLE Members (MemberID INT)
INSERT Members VALUES (1001)
CREATE TABLE PCPs (PCPID INT)
INSERT PCPs VALUES (231)
INSERT PCPs VALUES (327)
INSERT PCPs VALUES (390)
CREATE TABLE Plans (PlanID INT)
INSERT Plans VALUES (555)
INSERT Plans VALUES (762)
CREATE TABLE MemberPCP (
MemberID INT
, PCP INT
, StartDate DATETIME
, EndDate DATETIME)
INSERT MemberPCP VALUES (1001, 231, '2002-01-01', '2002-06-30')
INSERT MemberPCP VALUES (1001, 327, '2002-07-01', '2003-05-31')
INSERT MemberPCP VALUES (1001, 390, '2003-06-01', '2003-12-31')
CREATE TABLE MemberPlans (
MemberID INT
, PlanID INT
, StartDate DATETIME
, EndDate DATETIME)
INSERT MemberPlans VALUES (1001, 555, '2002-01-01', '2003-03-31')
INSERT MemberPlans VALUES (1001, 762, '2003-04-01', '2003-12-31')
メンバー/PCP/プランの関係のタイムラインを構築するためのクリーンな方法を探しています。メンバーの PCP またはプランのいずれかが変更されると、結果の開始行と終了行が別々になります。たとえば、メンバーが数年にわたって PCP を 2 回変更し、プランを 1 回変更したが、それぞれの日付が異なる場合、次のように表示されます。
MemberID PCP PlanID StartDate EndDate
1001 231 555 2002-01-01 2002-06-30
1001 327 555 2002-07-01 2003-03-31
1001 327 762 2003-04-01 2003-05-31
1001 390 762 2003-06-01 2003-12-31
ご覧のとおり、メンバー/PCP/プランの関連付けに違いがある日付期間ごとに、個別の結果行が必要です。私は解決策を用意していますが、WHERE 句に多数の CASE ステートメントと条件付きロジックがあり、非常に複雑です。これを行うにはもっと簡単な方法があると思います。
ありがとう。