MySQL联合和删除半相似行

MySQL联合和删除半相似行,mysql,union,Mysql,Union,我有一个由两个表组成的视图,一个是死亡率表,一个是临床时间表表。死亡率表中每个患者最多只包含一个条目(出于明显原因),时间线中可以包含多个条目 我遇到的问题是,有时用户会将死亡率记录在死亡率表中,有时记录在时间线表中,有时记录在两者中。我不能使用'Distinct'关键字,因为行略有不同,因为它们还包含源表名 因此,我可以得到这样的结果: pat_key, date, event, source 1, 2018-03-01, died, p_mortality 1, 2018-03-01, di

我有一个由两个表组成的视图,一个是死亡率表,一个是临床时间表表。死亡率表中每个患者最多只包含一个条目(出于明显原因),时间线中可以包含多个条目

我遇到的问题是,有时用户会将死亡率记录在死亡率表中,有时记录在时间线表中,有时记录在两者中。我不能使用'Distinct'关键字,因为行略有不同,因为它们还包含源表名

因此,我可以得到这样的结果:

pat_key, date, event, source
1, 2018-03-01, died, p_mortality
1, 2018-03-01, died, p_events
1, 2018-02-01, admitted, p_events
工会是相当直截了当的——例如

select pat_key, mmdate as `date`, 'died' as event, 'p_mortality' as source from p_mortality
union distinct
select pat_key, evdate as `date`, evevent as event, 'p_timeline' as source from p_timeline

是否有任何明显的技巧可以用来消除其中一个半重复项?

您可以使用聚合函数减少行数,例如:group\u concat

  select pat_key, `date`, event, group_concat(source)
  from 
  (
    select pat_key, mmdate as `date`, 'died' as event, 'p_mortality' as source from p_mortality
    union 
    select pat_key, evdate as `date`, evevent as event, 'p_timeline' as source from p_timeline
  ) t 
  group by pat_key, `date`, event