時間表考慮最佳方式follwing:SQL:建立從兩個歷史表
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和他們的計劃一次,但每次在不同的日期,我會看到類似以下內容:
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語句和條件邏輯,這是非常令人費解的。我只是覺得有一個更簡單的方法來做到這一點。
謝謝。
我們可以看看你的作品嗎? –
你可以發佈這個複雜的CASE語句到[SQLFiddle](http://sqlfiddle.com/),以便我們可以看到你做了什麼? –
這是一件非常複雜的事情。我不知道是否有*更簡單的方法來做到這一點。所以你應該發佈你的解決方案,我們可以幫助你從那裏開始 – Lamak