1

私のアプリケーションのバグにより、各配送期間の毎日の記録を保持するために作成されたテーブルが何度も読み込まれました。

6月1日から6月5日まで配達があるとしましょう。私のテーブルには、毎日 1 つずつ、5 つのレコードが入力されているはずです。今、同じ内容の「バッチ」がたくさんあるので、大混乱です。

テーブル レイアウトは次のとおりです。

dummy_id       -- identity column
delivery_id    -- id of the delivery
on_date        -- the day
charge         -- the daily cost

レコードの最初のバッチのみを保持し、すべての配送で誤って挿入されたバッチを削除するエレガントな方法はありますか?

4

3 に答える 3

2

delivery_id, on_date, charge最も低いものを保持するためにすべての重複を削除するにはdummy_id

;WITH cte
     AS (SELECT ROW_NUMBER() OVER (PARTITION BY delivery_id,
                                                on_date,
                                                charge
                                       ORDER BY dummy_id) RN
         FROM   YourTable)
DELETE FROM cte
WHERE  RN > 1
于 2012-11-02T16:04:04.183 に答える
1

あなたが試すことができます:

これは、削除する行を知るためです。

SELECT * FROM YOUR_TABLE WHERE DUMMY_ID NOT IN (
   SELECT MIN(DUMMY_ID) FROM YOUR_TABLE GROUP BY DELIVERY_ID)

これにより、次の行が削除されます。

DELETE FROM YOUR_TABLE WHERE DUMMY_ID NOT IN (
   SELECT MIN(DUMMY_ID) FROM YOUR_TABLE GROUP BY DELIVERY_ID)
于 2012-11-02T16:05:17.553 に答える
1

試す

DELETE FROM table WHERE dummy_id NOT IN (SELECT MIN(dummy_id) FROM table GROUP BY on_date)
于 2012-11-02T16:06:34.843 に答える