1

RUN_TIME 列と OPERATION_NAME 列を含むテーブルがあります。各操作の N 個よりも古いインスタンスを削除して、テーブルをトリミングしたいと思います。例: 入力テーブルが

RUN                 OPERATION
13/11/2012 05:39    GAM010P0
14/11/2012 05:39    GAM010P0
15/11/2012 05:39    GAM010P0
13/11/2012 05:09    GAM020P0
14/11/2012 05:09    GAM020P0
15/11/2012 05:09    GAM020P0
16/11/2012 05:09    GAM020P0
01/11/2012 17:09    GAM060P0

そして、各操作の最新の 2 つのインスタンスを維持したいと思います。出力は次のようになります。

RUN                 OPERATION
14/11/2012 05:39    GAM010P0
15/11/2012 05:39    GAM010P0
15/11/2012 05:09    GAM020P0
16/11/2012 05:09    GAM020P0
01/11/2012 17:09    GAM060P0

通常、RANK 分析関数を使用して RUN_TIME でランク付けし、OPERATION_NAME でグループ化します。ただし、このテーブルは sqlite DB に存在するため、削除 SQL ステートメントを記述してこれを実現することはできません。

4

1 に答える 1

1

同じ操作のレコードがデータベースにいくつ存在するかを数える必要があります。特定のレコードについて、タイムスタンプが新しいレコードが他に2つ以上ある場合は、このレコードを削除する必要があります。

DELETE FROM MyTable
WHERE (SELECT COUNT(*)
       FROM MyTable AS Newer
       WHERE Newer.OPERATION = MyTable.OPERATION AND
             Newer.RUN > MyTable.RUN
      ) >= 2

yyyy-mm-dd日付の比較が機能するように、最初の最上位フィールドのような日付形式を使用する必要があることに注意してください。

于 2012-11-26T12:19:04.130 に答える