我有一个包含三列Member,id和DOB的表。我想为每个唯一成员分配一个id。如果有一个成员标记了多个id,那么我必须指定更多重复的id。如果出现平局,那么我必须为最近的DOB分配id。
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)和一个不同的id(6987)。在这里,我应该有8569标记到这个4000成员。对于4111成员,我有两个不同的ID(9653和6987)。所以我会看到该成员最近的DOB。因此,对于4111会员,我将标记为9653。
输出应该是这样的:
4000 8569
4111 9653
5000 5632
5001 4356
我尝试过很多次。但我无法得到确切的答案。请帮我解决这个问题。提前谢谢。
答案 0 :(得分: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;