2016-11-21 1 views
2

Ich habe eine Tabelle mit drei Spalten Mitglied, ID und DOB. Ich möchte jedem eindeutigen Mitglied eine ID zuweisen. Wenn mehr als eine ID für ein Mitglied markiert ist, muss ich ID mit mehr Wiederholungen zuweisen. Wenn ein Gleichstand auftritt, muss ich ID mit dem letzten DOB zuweisen.Vergleichen von Werten innerhalb einer Spalte mit 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 

In dem oben, Mitglied der 5000 und 5001 werden auf einzelne ID getaggt .. Also ich soll die gleiche ID für dieses Mitglied bekommen .. Während für Mitglied 4000 Ich habe 3 id's- 2 gleiche Ids (8569) und eine andere ID (6987). Hier sollte ich 8569 zu diesem 4000 Mitglied getaggt haben. Für 4111 Mitglieder habe ich zwei verschiedene IDs (9653 und 6987). Also werde ich das letzte DOB für dieses Mitglied sehen. Also für 4111 Mitglieder werde ich 9653 dafür haben.

Die Ausgabe sollte so aussehen:

4000 8569 
4111 9653 
5000 5632 
5001 4356 

ich viele versucht haben. Aber ich konnte die genaue Antwort nicht bekommen. Bitte hilf mir, das zu lösen. Danke im Voraus.

Antwort

1

Sie können dies mit 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; 
Verwandte Themen