SQL Serverテーブルで重複するレコードを確認する最適な方法は何ですか?SQL Serverの重複チェック
たとえば、テーブルに受信した最後の重複した電子メール(テーブルには主キー、受信日、電子メールフィールドがあります)を探したいとします。
サンプルデータ:
1 01/01/2008 [email protected]
2 02/01/2008 [email protected]
3 01/12/2008 [email protected]
SQL Serverテーブルで重複するレコードを確認する最適な方法は何ですか?SQL Serverの重複チェック
たとえば、テーブルに受信した最後の重複した電子メール(テーブルには主キー、受信日、電子メールフィールドがあります)を探したいとします。
サンプルデータ:
1 01/01/2008 [email protected]
2 02/01/2008 [email protected]
3 01/12/2008 [email protected]
あなたは、電子メールフィールド上のリストに参加して、あなたの結果で取得ゼロにするものを見ることができませんでしたか?
さらに、各電子メールアドレスのインスタンスを数えますか?カウント> 1を返すだけです
さらに、メールとIDフィールドを取得してください。そして、電子メールが同じで、IDが異なるエントリを返します。 (重複は使用しない避けるために!=はなく、むしろ<か>のいずれか。)この
select email ,max(receiveddate) as MaxDate
from YourTable
group by email
having count(email) > 1
何かがこの
select * from table a, table b
where a.email = b.email
よう
SELECT [id], [receivedate], [email]
FROM [mytable]
WHERE [email] IN (SELECT [email]
FROM [myTable]
GROUP BY [email]
HAVING COUNT([email]) > 1)
を試してみて、あなたがのリストをしたいですか最後の項目は?もしそうなら、あなたは使用することができます
SELECT [info] FROM [table] t WHERE NOT EXISTS (SELECT * FROM [table] tCheck WHERE t.date > tCheck.date)
あなたはすべての重複メールアドレス使用GROUP BYのリストが必要な場合は、同様のデータは、HAVING句を収集するために数量が1以下であることを確認する:
SELECT [info] FROM [table] GROUP BY [email] HAVING Count(*) > 1 DESC
あなたが最後に重複した電子メール(単一の結果を)したい場合は、単に「TOP 1」と「ORDER BY」を追加します。
SELECT TOP 1 [info] FROM [table] GROUP BY [email] HAVING Count(*) > 1 ORDER BY Date DESC
あなたは代理キーを持っている場合、使用することは比較的容易です構文によるグループSQLMenanceの投稿にあります。基本的には、2つ以上の行を同じにするすべてのフィールドでグループ化します。
重複レコードを削除するための擬似コードの例。
Create table people (ID(PK), Name, Address, DOB)
Delete from people where id not in (
Select min(ID) from people group by name, address, dob
)
ような何か試してみてくださいを参照してください
SELECT * FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ReceivedDate, Email ORDER BY ReceivedDate, Email DESC) AS RowNumber
FROM EmailTable
) a
WHERE RowNumber = 1
をhttp://www.technicaloverload.com/working-with-duplicates-in-sql-server/