-4

6 つの列フィールドを持つテーブルがあります。重複した電子メールがある場合は、2 番目の列の日付に基づいて新しいレコードを選択し、列 F の列 F (6 番目の列) を除くその行からすべてのデータを取得します。たとえば、

次の 2 行のデータを組み合わせる必要があります。

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

それでもデータが不足している場合は、次のことを試してみます...私のプレクエリは、最新の日付で各メールを取得しています。次に、テストテーブルに参加して、電子メールごとに日付で「最初のレコード」のみの詳細を取得します...次に、他のすべてのレコードを電子メールで結合し、グループの連結を取得します。

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 に答える