行を返すためにテーブルをクエリする必要がありますが、テーブルを正しくクエリすることができません。これが私のテーブルビューです。
Id MailId EmailAddress Name
1 1 [email protected] Mr. A
2 1 [email protected] Mr. B
3 1 [email protected] Mr. C
4 1 [email protected] Mr. D
5 1 [email protected] Mr. A
6 2 [email protected] Mr. E
7 2 [email protected] Mr. A
8 3 [email protected] Mr. F
9 4 [email protected] Mr. D
10 5 [email protected] Mr. F
11 6 [email protected] Mr. D
結果セットは以下を返します。
Id MailId EmailAddress Name
1 1 [email protected] Mr. A
2 1 [email protected] Mr. B
3 1 [email protected] Mr. C
4 1 [email protected] Mr. D
6 2 [email protected] Mr. E
8 3 [email protected] Mr. F
言い換えると、まず、個別の電子メールアドレスを選択してから、個別の電子メールアドレスを含む行を返します。
注:「個別」キーワードを使用するだけでは、個別の行を選択するため、ここでは機能しません。私の要件は、個別の電子メールアドレスを選択し、それらのアドレスを含む行を選択することです。
編集:「Group By」キーワードも使用できません。これにはId(PK)でグループ化する必要があり、これを行うと同じEmailAddress値を持つ2行が返されるためですただし、異なるIDを使用します。
出力を見て、次のクエリが機能する可能性があるので、試してみてください。
SELECT * FROM tablename
WHERE id IN
(SELECT MIN(id) FROM tablename GROUP BY EmailAddress)
これにより、個別の電子メールアドレスごとに1行のみが選択されます。結果として表示されるのは、id
が最小の行です。
これを試してください-個別の電子メールアドレスでデータをパーティション化(グループ化)し、IDで各グループを並べ替えるCTE(共通テーブル式)が必要です。次に、各グループの最初のエントリを選択するだけで、探しているものが得られます。
;WITH DistinctMails AS
(
SELECT ID, MailID, EMailAddress, NAME,
ROW_NUMBER() OVER(PARTITION BY EMailAddress ORDER BY ID) AS 'RowNum'
FROM dbo.YourMailTable
)
SELECT *
FROM DistinctMails
WHERE RowNum = 1
これはSQL Serverで動作します2005以降(使用しているものは言及していませんversion使用しています...)
これを使用します(テーブル名がメールであると仮定します):
select * from emails as a
inner join
(select EmailAddress, min(Id) as id from emails
group by EmailAddress ) as b
on a.EmailAddress = b.EmailAddress
and a.Id = b.id
この助けを願っています。
DBMSについてはわかりません。そのため、Redshiftで一時テーブルを作成しましたが、私の経験から、このクエリは探しているものを返すはずです。
select min(Id), distinct MailId, EmailAddress, Name
from yourTableName
group by MailId, EmailAddress, Name
GROUP BY clause
を使用していることがわかりますが、特定のMailId
に対して2つの行はまだありません。