2016-10-12 120 views
1

我想選擇記錄,如果有重疊日期,我只有1條記錄。我環顧四周,發現問題很近,但無法讓他們解決我遇到的問題。如果你能幫助我,我將不勝感激。從多個時間段中選擇1條記錄

問題是一個會員可以有很多訪問與有效和結束日期。不能有重疊的時間被註冊。如果有相同生效日期的重疊時間,我如何只有1條記錄?

我試過max EndDate等..但沒有工作。另外,我可以爲1個成員使用相同的TIN和日期獲得2個以上的記錄。因此需要將MIN/MAX日期作爲該時間段的一個記錄。 數據:

MEMBER - TIN - EffectiveDate - EndDate 
12345 4567 2016-11-18  2016-11-19 --dont want this record 
12345 4567 2016-11-18  2017-11-20 --good 
12345 5678 2016-11-18  2016-12-30 --good, different TIN 

    Select t1.MEMBER, t1.TIN, t1.EFF_DT 
    , Case When (select t2.MEMBER = t1.MEMBER and t1.Eff_DT = t2.END_DT 
       THEN t2.END_DT ELSE t1.END_DT 
       END AS END_DT 
       )t2 
    FROM Table_A t1 
    WHERE t1.MEMBER = t2.MEMBER 
    order by t1.MEMBER 

希望我得到的代碼直接從我的嘗試。

+0

你是什麼意思不起作用? –

+0

我無法擺脫我不想要的紀錄。帶回所有記錄。 – user3933707

+0

向我們顯示您的查詢。 –

回答

2

我想這是你想要的?

SELECT * 
FROM 
(
    SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY MEMBER, TIN, EFFECTIVE_DATE 
              ORDER BY END_DATE DESC) 
    FROM yourtable 
) d 
where d.RN = 1 

如果沒有,請告訴我們您預期的結果

+0

添加了查詢此工作。我今天早些時候嘗試過這種類型的查詢,但我沒有使用DESC,我想我必須在分區BY區域有很多字段。使用你有一箇中提琴擺脫了額外的行。非常感謝你! :) – user3933707

0

我想你可以使用上面的解決方案。你能提供你試過的查詢嗎?你應該能夠做到以下幾點:

SELECT Member, TIN, MAX(EndDate) as endDate 
FROM table_name 
GROUP BY Member, TIN 
0

試試這個。

SELECT t.member, t.tin, t.effectivedate, t.enddate 
FROM TABLE_A t 
GROUP BY t.tin, t.member, t.enddate 
HAVING t.enddate = 
        (
        SELECT MAX(tt.enddate) 
        FROM TABLE_A tt 
        WHERE t.member = tt.member 
        AND t.tin = tt.tin 
       ) 
+0

這很接近。仍然保持一個日期重疊的額外記錄。有2條記錄,分別是2016-11-18和2016-11-20的eff_dt。所以我只需要2016-11-18,min記錄保持。謝謝您的幫助。我將能夠在將來使用你所擁有的東西。 – user3933707