2016-11-21 11 views
2

私は3つの列Member、id、およびDOBを持つテーブルを持っています。私はそれぞれの一意のメンバーにidを割り当てる必要があります。メンバーにタグ付けされたIDが複数ある場合は、より多くの再発IDを割り当てる必要があります。ネクタイが発生した場合、IDを最新のDOBに割り当てる必要があります。上記でSQLを使用して列内の値を比較する

4000 8569 11/11/1993 
4111 9653 12/11/1993 
4000 8569 12/12/1993 
5000 5632 01/01/1993 
4000 6932 31/12/1993 
4111 6987 06/11/1993 
5001 4356 01/01/1993 

、メンバーの5000と5001は、単一のIDにタグ付けされます。..だから私は、そのメンバーのために同じIDを取得する必要があります。..メンバー4000のために、私は3つのid's- 2と同じIDS(8569)を有する午前のに対し1つの異なるID(6987)。ここでは、4000人のメンバーに8569というタグが付いています。 4111メンバーの場合、私は2つの異なるID(9653と6987)を持っています。だから私はそのメンバーの最近のDOBを見るでしょう。だから、4111人のメンバーには9653がタグ付けされます。

出力は次のようにする必要があります:私は多くを試してみました

4000 8569 
4111 9653 
5000 5632 
5001 4356 

。しかし、私は正確な答えを得ることができませんでした。これを解決するために私を助けてください。前もって感謝します。

答えて

1

あなたはwindow functions in t-sqlでこれを行うことができます。

create table #t (
    Member int, 
    id int, 
    DOB date 
); 

insert into #t 
values (4000, 8569, '1993-11-11'), 
     (4111, 9653, '1993-11-12'), 
     (4000, 8569, '1993-12-12'), 
     (5000, 5632, '1993-01-01'), 
     (4000, 6932, '1993-12-31'), 
     (4111, 6987, '1993-11-06'), 
     (5001, 4356, '1993-01-01'); 

with cte as 
(
    select *, count(id) over (partition by member, id) cnt from #t 
), 
cte2 as 
(
    select *, row_number() over (partition by member order by cnt desc, dob desc) rn from cte 
) 
select member, id from cte2 where rn = 1; 

drop table #t; 
関連する問題