-4

我有一个包含 6 列字段的表。如果有重复的电子邮件,则根据第二列中的日期选择较新的记录,并从该行中获取除 F 列(第 F 列)之外的所有数据(第 F 列),合并所有记录中的值,例如,如果有

这两行数据应该结合起来:

s@s.com 15/12/2012 122 dd34 23ds3 This data
s@s.com 12/12/2012 123 dd35 232d2 Should be combined

结果应该是:

s@s.com 15/12/2012 122 dd34 23ds3 This data Should be combined
4

2 回答 2

2
SELECT
  email, date, column_c, column_d, column_e,
  GROUP_CONCAT(column_f SEPARATOR ' ') AS column_f
FROM (
  SELECT *
  FROM tablename
  ORDER BY date
) i
GROUP BY email
  HAVING date = MAX(date)

看到它工作

于 2012-08-07T08:26:27.203 回答
0

如果您仍然缺少数据,我会尝试以下操作......我的预查询正在获取每封电子邮件的最新日期。然后,加入测试表以获取每封电子邮件的日期仅“第一条记录”的详细信息......然后通过电子邮件加入所有其他记录并获取组 concat。

select
      FirstRec.Email,
      FirstRec.Date,
      FirstRec.Column_C,
      FirstRec.Column_D,
      FirstRec.Column_E,
      GROUP_CONCAT( BySameEmail.Column_F SEPARATOR ' ' ) as Column_F
   from
      ( select
              email, max( date ) Newest
           from
              test_Table
           group by 
              email ) PQ
         JOIN Test_Table FirstRec
            on PQ.EMail = FirstRec.EMail
           AND PQ.Newest = FirstRec.Date
         JOIN Test_Table BySameEMail
            on PQ.EMail = BySameEMail.EMail
   group by
      FirstRec.EMail

我从 Dave 的答案发布提供的 SQL Fiddle 示例数据中收到了所有 3 封电子邮件。

于 2012-08-07T11:19:08.930 回答