检查以前的记录以更新Oracle中的当前记录

时间:2012-06-09 18:45:37

标签: sql oracle plsql

我很难弄清楚如何检查以前的记录,以便查看当前记录是否应该更新。

不想使用滞后功能,因为我没有关于要返回多少记录的信息。

我有一个包含Employee Raise信息的表。如果之前的Merit增加PCT大于过去6个月内当前的Merit增幅,我想在IND字段中放置一个X.目前的记录是2012/05的记录。

Emp    Action   Date       Code     proj   PCT   Ind
====================================================
123    raise    2012/01    COL      acct   2
123    raise    2012/01    Merit    soft   7
123    raise    2012/02    Merit    Acct   4
123    Raise    2012/05    merit    soft   6     ?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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而不仅仅是最新的行。