0

助けてくれてありがとう、私はこの問題で立ち往生しています。

説明させてください、私はこの種のテーブルを持っています:

| domain |     creationdate    | value 1 | value 2 |
|--------|---------------------|---------|---------|
| abc    | 2013-05-28 15:35:01 | value 1 | value 2 |
| abc    | 2013-04-30 12:10:10 | value 1 | value 2 |
| aaa    | 2011-04-02 13:10:10 | value 1 | value 2 |
| bbb    | 2012-02-12 10:48:10 | value 1 | value 2 |
| bbb    | 2013-04-15 07:15:23 | value 1 | value 2 |

そして、私はこれを(サブクエリで)選択したい:

| domain |     creationdate    | value 1 | value 2 |
|--------|---------------------|---------|---------|
| abc    | 2013-04-30 12:10:10 | value 1 | value 2 |
| aaa    | 2011-04-02 13:10:10 | value 1 | value 2 |
| bbb    | 2012-02-12 10:48:10 | value 1 | value 2 |

WHERE 句と group by/having で IN/NOT IN を使用してサブクエリを組み合わせようとしましたが、適切な結果を得ることができません。

また、もう 1 つ質問があります。誰かがすでにこの種の問題に直面している場合は、彼がどのように解決したかを聞いてうれしいです。

上記の最初のテーブルのレコードは、頻繁に (10 分ごとに) 削除/挿入されています。私の目的は、後置メール サーバーによって 24 時間年中無休で使用される結果のコピー (またはビュー) を (重複エントリなしで) 作成することです。大きなビュー (多くのサブクエリを含む) はパフォーマンスを低下させると聞きました。これは、テーブルが望ましいオプションであることを意味します。問題は、10 分ごとに新しいテーブルを作成する必要がある場合、少しダウン タイムが発生し、postfix がテーブルを読み取れなくなることです。

アドバイスをお待ちしております。

編集 :

@Ed Gibbs の回答に基づいて、より良いサンプルがあります。

ソース テーブル:

| domain     |     creationdate    | value 1 | value 2 |
|------------|---------------------|---------|---------|
| google.com | 2013-05-28 15:35:01 | john    | mary    |
| google.com | 2013-04-30 12:10:10 | patrick | edward  |
| yahoo.fr   | 2011-04-02 13:10:10 | britney | garry   |
| ebay.com   | 2012-02-12 10:48:10 | harry   | mickael |
| ebay.com   | 2013-04-15 07:15:23 | bill    | alice   |

クエリの結果はソース テーブルです。

望ましい結果:

| domain     | value 1 | value 2 |
|------------|---------|---------|
| google.com | patrick | edward  |
| yahoo.fr   | britney | garry   |
| ebay.com   | harry   | mickael |

最も古いドメイン (最小作成日) を独自の値 1 と 2 で保持したい.


新しい質問!

あなたの回答に基づいて、望ましい結果を表示しました。

結果は次のようになります。

| domain     | value 1 | foreign_key |
|------------|---------|-------------|
| google.com | patrick | X           |
| yahoo.fr   | britney | Y           |
| ebay.com   | harry   | Z           |

この種のエントリを含むテーブルもあります。

| email              | value 1 | foreign_key |
|--------------------|---------|-------------|
| john@google.com    | patrick | X           |
| john@google.com    | britney | Y           |
| harry@google.com   | mary    | X           |
| mickael@google.com | jack    | X           |
| david@ebay.com     | walter  | Z           |
| alice@yahoo.com    | brian   | Y           |

(このサンプルでは) Yforeign_key からの %@google.com メールは適切なレコードではないと仮定します (Xforeign_key からの %google.com のみが適切なレコードであり、そのドメインは作成日選択で選択したドメインであるため)。新しいビューで参照されているドメイン/fk からのメールのみを選択できますか?

望ましい結果:

| email              | value 1 | foreign_key |
|--------------------|---------|-------------|
| john@google.com    | patrick | X           |
| harry@google.com   | mary    | X           |
| mickael@google.com | jack    | X           |
| david@ebay.com     | walter  | Z           |
| alice@yahoo.com    | brian   | Y           |

CONCAT('%','@',domain) とforeign_key=foreign_key 結合を試してみましたが、欲しいものが得られません。

4

1 に答える 1

1

サンプル データと結果に基づいて、GROUP BY次のような結果が得られます。

SELECT
  domain,
  MIN(creationdate) AS creationdate,
  value1,
  value2
FROM mytable
GROUP BY domain, value1, value2

補遺: @Arka は、value 1value 2列の値が異なる更新されたサンプル データを提供しました (元のデータでは同じでした)。これにより、クエリが次のように変更されます。

SELECT domain, creationdate, value1, value2
FROM mytable
WHERE (domain, creationdate) IN (
  SELECT domain, MIN(creationdate)
  FROM mytable
  GROUP BY domain)

creationdateサブクエリはそれぞれの最も古いもののリストを取得しdomain、外側のクエリはサブクエリの値domaincreationdate一致する行のみを選択します。

于 2013-05-28T19:26:27.383 に答える