はい、同様の質問を何度も見つけることができますが、ここに投稿された最も洗練されたソリューションは、SQL Server では機能しますが、Sybase (私の場合は Sybase Anywhere 11) では機能しません。SQL Server の質問と重複しているとマークされた Sybase 関連の質問をいくつか見つけましたが、これは役に立ちません。
私が気に入ったがうまくいかなかった解決策の一例は、WITH ... DELETE ...
コンストラクトです。
カーソルまたは while ループを使用して有効な解決策を見つけましたが、ループなしでそれが可能であることを願っています。
正確な重複を 1 つだけ残してすべて削除するだけで、素晴らしくシンプルで高速なクエリを期待しています。
テスト用の小さなフレームワークを次に示します。
IF OBJECT_ID( 'tempdb..#TestTable' ) IS NOT NULL
DROP TABLE #TestTable;
CREATE TABLE #TestTable (Column1 varchar(1), Column2 int);
INSERT INTO #TestTable VALUES ('A', 1);
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 1); -- duplicate
INSERT INTO #TestTable VALUES ('A', 2);
INSERT INTO #TestTable VALUES ('B', 1);
INSERT INTO #TestTable VALUES ('B', 2);
INSERT INTO #TestTable VALUES ('B', 2); -- duplicate
INSERT INTO #TestTable VALUES ('C', 1);
INSERT INTO #TestTable VALUES ('C', 2);
SELECT * FROM #TestTable ORDER BY Column1,Column2;
DELETE <your solution here>
SELECT * FROM #TestTable ORDER BY Column1,Column2;