我很难弄清楚如何检查以前的记录,以便查看当前记录是否应该更新。
不想使用滞后功能,因为我没有关于要返回多少记录的信息。
我有一个包含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 ?
答案 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而不仅仅是最新的行。