2016-04-28 6 views
1

私は次のクエリを選択して(更新ステートメントに使用します)、minサービスの日付に基づいて重複を削除し、最新のsvcの日付を保持します。重複のあるベースの日付を削除する

select st.SubID, st.RecordNo, st.Fname, st.Lname, st.MemberID, st.ServiceDate, IsDeduped, DedupCriteria 
     from stagingtable st 
     join (select MemberID 
        from stagingtable 
        where SubID = 99999 
          and waveseqid = 1 
        group by MemberID 
        having count(*) > 1) st2 
     on st.MemberID = st2.MemberID 
     and st.ServiceDate = (Select min(ServiceDate) from stagingtable s where s.subid = 99999 and s.waveseqid = 1 and st.MemberID = s.MemberID) 
where SubID = 99999 
     and waveseqid = 1 
     order by RecordNo 

これはいつかのみMEMBERIDため同日付で倍数に引っ張るで引っ張っているようだ:

SurveyID RecordNo Fname Lname MemberID Option9 IsDeduped DedupCriteria 
99999 1 John Doe 123 10/1/2015 0 NULL x These show on the query 
99999 2 John Doe 123 10/1/2015 0 NULL x These show on the query 
99999 3 John Doe 123 10/8/2015 0 NULL But expected these as well 
99999 4 John Doe 123 10/12/2015 0 NULL But expected these as well 
99999 4 John Doe 123 10/14/2015 0 NULL But expected these as well 
99999 6 John Doe 123 10/29/2015 0 NULL But expected these as well 
99999 7 John Doe 123 12/14/2015 0 NULL But expected these as well 

答えて

1

は、あなたの「AND」ステートメントは、最低限のサービスの日付の行のみに結果を制限します。

and st.ServiceDate = (Select min(ServiceDate) from stagingtable s where s.subid = 99999 and s.waveseqid = 1 and st.MemberID = s.MemberID) 

だからこそ、それらのすべてではなく2つの行が得られます。

関連する問題