2

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

不想使用滞后功能,因为我不会知道要返回多少条记录的信息。

我有一个包含员工提升信息的表。如果在过去 6 个月内之前的绩效增长 PCT 大于当前的绩效增长,我想在 IND 字段中打一个 X。当前记录是 2012/05 记录。

Emp 行动日期代码 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

我现在没有数据库来测试这个,所以我不完全确定这会起作用,但我认为它应该。编辑:制定了如何让 SQL Fiddle 在我的 iPad 上运行。这似乎可行,但是它将在满足条件的所有行中放置一个 X,而不仅仅是最近的。

于 2012-06-10T09:17:07.767 回答