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

现在,此解决方案不会考虑不一致的数据,例如,同一个人有两个不同的出生日期。