使用sql

时间:2016-11-21 10:23:45

标签: mysql sql-server

我有一个包含三列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

我尝试过很多次。但我无法得到确切的答案。请帮我解决这个问题。提前谢谢。

1 个答案:

答案 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;