サーバー側コードのユーザー名フィールドの大文字と小文字の区別のために、誤ってデータが複数回保存されたデータを保存するテーブルがあります。ユーザー名フィールドは大文字と小文字を区別しないと見なす必要があります。表の重要な列とデータは以下にあります。
私の要件は、最新の保存データを除くすべてを削除することです。私はこのためのSQLスクリプトを作成しており、重複しているすべての行を識別することから始めました。この選択により、次のようなテーブルが返されます。
各行の最新の保存は、存在する場合はLASTUPDATEDDATEであり、存在しない場合はCREATEDDATEです。この例では、「username」の最新の保存は行3になります。
ID CREATEDDATE LASTUPDATEDDATE USERNAME --------------- --------------- -------- 12011年11月11日ユーザー名 2011年11月1日2011年11月2日ユーザー名 32012年1月8日ユーザー名
私のスクリプト(重複したユーザー名が表示されるすべての行を選択します)は次のようになります。
SELECT
id, createddate, lastupdateddate, username
FROM
table
WHERE
LOWER(username)
IN
(
SELECT
LOWER(username)
FROM
table
GROUP BY
LOWER(username)
HAVING
COUNT(*) > 1
)
ORDER BY
LOWER(username)
今の私の質問は、行3以外のすべてを選択するにはどうすればよいですか?Stack Overflowでこの質問に一致するものを検索しましたが、十分に一致するものが見つかりませんでした。私はおそらく何らかの参加をしなければならないことを知っていますが、それについて頭を悩ませることはできません。正しい方向へのプッシュに本当に感謝します。
おそらくかなり新しいバージョンのSQLServerを使用しています。