2016-10-12 9 views
1

重複する日付がある場合はレコードが1つしかないレコードを選択しようとしています。私は周りを見回して、近くに質問を見つけましたが、私には何の問題があるのか​​を彼らに知らせることができませんでした。あなたが私を助けることができたら、私はそれを大いに感謝します。期間内に1レコードを選択

問題は、有効期限と終了日を持つ会員が多数訪問する可能性があるという問題です。重複して登録することはできません。同じ有効期限を持つ重複した時間がある場合、私はどのようにして1レコードしか持てませんか?

私は最大限のEndDateなどを試していますが、それはうまくいきません。また、私は同じTINと日付を持つ1人のメンバーに対して2つ以上のレコードを持つことができます。したがって、MIN/MAXをその期間の1レコードとして取得する必要があります。 データ:

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を使用せず、私はPartition BY領域に多くのフィールドを持っていたと思います。あなたはそれが余分な行を取り除いたビオラを持っていたものを使いました。どうもありがとうございました! :) – user3933707

0

非常に一般的なクエリーチャレンジを示してください。この記事をチェックアウト:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

あなたは試みることができる:

select t1.* 
from (
    select MEMBER, TIN, MIN(EffectiveDate) AS MinDate, MAX(EndDate) AS MaxDate 
    from table_name group by MEMBER, TIN 
) as t1 inner join table_name as t2 
    on t1.MEMBER = t2.MEMBER and t1.TIN = t2.TIN; 
+0

それは動作しませんでした。元の金額より多くの記録を取り戻しました。 – 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

これは近いです。まだ日付が重複している余分な記録が残っていました。 eff_dt 2016-11-18と2016-11-20の2つのレコードを持っていました。だから、私は2016年11月18日分だけ記録が必要です。助けてくれてありがとう。私はあなたが将来持っているものを私が確かに使うことができるでしょう。 – user3933707

関連する問題