2

現在のレコードを更新する必要があるかどうかを確認するために、以前のレコードを確認する方法がわかりません。

戻るレコードの数に関する情報がないため、ラグ関数を使用したくありません。

従業員の昇給情報を含むテーブルがあります。過去 6 か月以内に、現在のメリットの増加よりも大きい以前のメリットの増加 PCT があった場合、IND フィールドに X を入力します。現在の記録は2012/05の記録です。

従業員アクション日付コード proj PCT Ind
================================================== ==
123 レイズ 2012/01 COL アカウント 2
123 昇給 2012/01 メリットソフト 7
123 昇給 2012/02 功績勘定 4
123 レイズ 2012/05 メリット ソフト 6 ?
4

2 に答える 2

2

特に効率的ではありませんが、ブルートフォースアプローチを使用できます

UPDATE <<table_name>> a
   SET ind = 'X'
 WHERE <<date column>> = (SELECT MAX(<<date column>>
                            FROM <<table name>> b
                           WHERE a.emp = b.emp)
   AND EXISTS( SELECT 1
                 FROM <<table name>> c
                WHERE a.emp = c.emp
                  AND c.code = 'Merit'
                  AND c.action = 'raise'
                  AND c.pct  > a.pct
                  AND c.<<date column>> > sysdate - interval '6' month 
                  AND c.rowid != a.rowid);
于 2012-06-09T21:09:31.843 に答える
0

更新ではなくクエリを探しているだけの場合は、これが機能する可能性があります

Select 
  emp, 
  action, 
  date, 
  code, 
  project, 
  pct,
  case when max(case when code='Merit' and action='raise' then pct end)
    over (partition by emp order by date 
      range between interval '6' month preceding and current row
    ) > pct then 'X' end as ind
From the_table

現在、これをテストするためのデータベースがないため、これが機能するかどうかは完全にはわかりませんが、そうすべきだと思います. 編集:iPadでSQL Fiddleを実行する方法を考え出しました。これは機能しているように見えますが、最新の行だけでなく、条件を満たすすべての行に X が表示されます。

于 2012-06-10T09:17:07.767 に答える