Select 具有复杂条件的不同行
Select Distinct Rows with complex criteria
我有一个从 CRM 软件生成的 table,它在不同的行中有很多重复的个人,但每次重复都完成了不同的字段,像这样:
id
birth_date
sex
postal_code
customer
smoker
001
NULL
NULL
00067
Yes
1
001
NULL
Male
00067
NULL
1
001
21/03/1994
NULL
00067
NULL
NULL
002
NULL
Female
NULL
NULL
NULL
002
NULL
NULL
09986
No
0
003
13/01/1986
NULL
NULL
No
1
从这个中提取的所需 table 应该是这样的:
id
birth_date
sex
postal_code
customer
smoker
001
21/03/1994
Male
00067
Yes
1
002
NULL
Female
09986
No
0
003
13/01/1986
NULL
NULL
No
1
所以正如你所看到的,有一些列在一些重复中完成,所以这个想法是为了避免重复(这里我们看到重复是因为不止一行有相同的id,id列应该是主键)并获取有关该 ID 的最大信息。
知道如何实现吗?
您可以汇总行并取最大 non-null 值,如:
select
id,
max(birth_date) as birth_date,
max(sex) as sex,
max(postal_code) as postal_code,
max(customer) as customer,
max(smoker) as smoker
from t
group by id
现在,此解决方案不会考虑不一致的数据,例如,同一个人有两个不同的出生日期。
我有一个从 CRM 软件生成的 table,它在不同的行中有很多重复的个人,但每次重复都完成了不同的字段,像这样:
id | birth_date | sex | postal_code | customer | smoker |
---|---|---|---|---|---|
001 | NULL | NULL | 00067 | Yes | 1 |
001 | NULL | Male | 00067 | NULL | 1 |
001 | 21/03/1994 | NULL | 00067 | NULL | NULL |
002 | NULL | Female | NULL | NULL | NULL |
002 | NULL | NULL | 09986 | No | 0 |
003 | 13/01/1986 | NULL | NULL | No | 1 |
从这个中提取的所需 table 应该是这样的:
id | birth_date | sex | postal_code | customer | smoker |
---|---|---|---|---|---|
001 | 21/03/1994 | Male | 00067 | Yes | 1 |
002 | NULL | Female | 09986 | No | 0 |
003 | 13/01/1986 | NULL | NULL | No | 1 |
所以正如你所看到的,有一些列在一些重复中完成,所以这个想法是为了避免重复(这里我们看到重复是因为不止一行有相同的id,id列应该是主键)并获取有关该 ID 的最大信息。
知道如何实现吗?
您可以汇总行并取最大 non-null 值,如:
select
id,
max(birth_date) as birth_date,
max(sex) as sex,
max(postal_code) as postal_code,
max(customer) as customer,
max(smoker) as smoker
from t
group by id
现在,此解决方案不会考虑不一致的数据,例如,同一个人有两个不同的出生日期。