2017-07-10 1 views
0

以下は、私が最初に作成された行を保存し、残りの部分を削除するには、クエリを書いていますDUMMY_TBL enter image description here保存行は

私のテーブルの状態です。グループ化はLOCAL_IDに基づいて行うことができます。この場合、クエリは最初と4番目の行を保持し、残りを削除する必要があります。 WHENCREATEDの列を見ると、行の作成の詳細に関する情報を得ることができます。これまでのところ私が行っている

select min(WHENCREATED),LOCAL_ID from DUMMY_TBL group by local_ID; 

あるしかし、これは私だけ分WHENCREATED日付とそれLOCAL_IDを与えます。しかし、私はさらに進める方法がわかりません。 助けていただければ幸いです。

+0

どのように2つのデータベースを同時に使用していますか? –

+0

互換性のないデータベースタグを削除しました。実際に使用しているデータベースのみにタグを付けてください。 –

+0

テーブル内の各行に一意の識別子がある場合は、クエリから抽出した行を除いてテーブルから削除することができます – Zeromus

答えて

0

MinDate/LOCAL_IDの組み合わせを収集し、実際の表に結合します。

select local_id, min(whencreated) as earliest 
from dummy_tbl 
group by local_id; 

をその後保つためにそれらのレコードを除く他のすべてのレコードを削除するために組み合わせる:維持するレコードをフェッチする問合せから

WITH CTE 
AS (
    SELECT min(WHENCREATED) AS MinDate 
     ,LOCAL_ID 
    FROM DUMMY_TBL 
    GROUP BY local_ID 
    ) 

DELETE 
FROM DUMMY_TBL 
JOIN CTE c ON c.MinDate != WHENCREATED 
    AND c.LOCAL_ID = LOCAL_ID 
+0

テーブルにユニークな識別子がありますが、削除すれば正確な行が削除されると思います。しかし、クエリを実行すると、DUMMY_TBLグループのmin(whencreated)、LOCAL_ID、AB_COURSE_ENROLLIDを選択できます。 local_ID;しかし、それは私がgroup by節でエラーを出します。 AB_COURSE_ENROLLIDは主キーです –

1

delete from dummy_tbl 
where (local_id, whencreated) 
not in 
( 
    select local_id, min(whencreated) as earliest 
    from dummy_tbl 
    group by local_id 
); 

がためのことを心に留めておきますin節のサイズが制限されているために大きなテーブルが動作しない可能性があります