1. ホーム
  2. sql

[解決済み] ある列の一意な値の最初の行だけを選択する方法は?

2022-08-23 03:53:08

質問

例えば、顧客の住所のテーブルがあるとします。

+-----------------------+------------------------+
|         CName         |      AddressLine       |
+-----------------------+------------------------+
|  John Smith           |  123 Nowheresville     |
|  Jane Doe             |  456 Evergreen Terrace |
|  John Smith           |  999 Somewhereelse     |
|  Joe Bloggs           |  1 Second Ave          |
+-----------------------+------------------------+

このテーブルでは、John Smithのような一人の顧客が複数の住所を持つことができます。 そのため SELECT クエリで、'CName' に重複が見つかった最初の行だけを返すようにしたいのです。このテーブルでは、3 行目 (または 1 行目 - これら 2 つの住所のいずれでもかまいませんが、返せるのは 1 つだけです) を除くすべての行を返す必要があります。

に追加できるキーワードはありますか? SELECT クエリを追加して、サーバーが以前にそのカラムの値を見たことがあるかどうかに基づいてフィルタリングすることはできますか?

どのように解決するのですか?

どのアドレスでも構わないということであれば、非常に簡単な回答です。

SELECT
    CName, MIN(AddressLine)
FROM
    MyTable
GROUP BY
    CName

もしあなたが、例えば "insert"カラムに応じた最初のものが欲しいのであれば、それは別のクエリになります。

SELECT
    M.CName, M.AddressLine,
FROM
    (
    SELECT
        CName, MIN(Inserted) AS First
    FROM
        MyTable
    GROUP BY
        CName
    ) foo
    JOIN
    MyTable M ON foo.CName = M.CName AND foo.First = M.Inserted