我有一个包含6个列字段的表。如果有重复的电子邮件,则根据第二列中的日期选择较新的记录,并从该行中获取除F列(第6列)以外的所有数据,并合并所有记录中的值 所以例如,如果有
应合并这两行数据:
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
答案 0 :(得分: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)
答案 1 :(得分:0)
如果您仍然缺少数据,我会尝试以下操作...我的预查询是为每封电子邮件提供最新日期。然后,加入测试表,只按每个电子邮件的日期获取“第一条记录”的详细信息......然后通过电子邮件加入所有其他记录并使小组连续。
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封电子邮件。